Надеемся, что установка force_color_prompt=yes директивы в вашем файле .bashrc заставит ее работать. Директива force_color_prompt=yes комментируется по умолчанию. Раскройте его, сохраните его и отправьте в файл .bashrc, чтобы увидеть изменения.
Команда для поиска вашего файла .bashrc:
cd ~
source .bashrc
После выполнения программы на C будет выяснено, имеет ли число значение 2, а также найдет, какая мощность равна 2, номер.
#include<stdio.h>
void main(void)
{
unsigned int a;
unsigned int count=0
unsigned int check=1;
unsigned int position=0;
unsigned int temp;
//get value of a
for(i=0;i<sizeof(int)*8;i++)//no of bits depend on size of integer on that machine
{
temp = a&(check << i);
if(temp)
{
position = i;
count++;
}
}
if(count == 1)
{
printf("%d is 2 to the power of %d",a,position);
}
else
{
printf("Not a power of 2");
}
}
Существуют и другие способы сделать это: - если число - это значение 2, только один бит будет установлен в двоичном формате
, например, 8 эквивалентен 0x1000, вычитая 1 из этого, получаем 0x0111.
Завершить операцию с исходным номером (0x1000) дает 0.
, если это так, число является степенью 2
void IsPowerof2(int i)
{
if(!((i-1)&1))
{
printf("%d" is a power of 2, i);
}
}
, другой способ может быть таким: -
Если мы возьмем дополнение числа, которое является степенью 2,
, например, дополнения 8, т. е. 0x1000, получим 0x0111 и добавим 1 к нему, получим
то же число, если это так, это число равно 2
void IsPowerof2(int i)
{
if(((~1+1)&i) == 1)
{
printf("%d" is a power of 2,i):
}
}
Разъясняется здесь красиво
. Также указанное выражение считает, что 0 является степенью 2. Чтобы исправить это, используйте !(x & (x - 1)) && x;.
Определяет, является ли целое число мощностью 2 или нет. Если (x & (x-1)) равно нулю, то это число равно 2.
Например, пусть x будет 8 (1000 в двоичном виде); то x-1 = 7 (0111).
if 1000
& 0111
---------------
0000
C программа для демонстрации:
#include <stdio.h>
void main()
{
int a = 8;
if ((a&(a-1))==0)
{
printf("the bit is power of 2 \n");
}
else
{
printf("the bit is not power of 2\n");
}
}
Это выводит the bit is power of 2.
#include <stdio.h>
void main()
{
int a = 7;
if ((a&(a-1))==0)
{
printf("the bit is power of 2 \n");
}
else
{
printf("the bit is not power of 2\n");
}
}
Это выводит the bit is not power of 2.
Ну,
, если у вас X = 1000, тогда x-1 = 0111. И 1000 & amp; & amp; 0111 равно 0000.
Каждое число X, являющееся степенью 2, имеет x-1, у которого есть единицы в положении x, имеет нули. И побитовое и 0 и 1 всегда равно 0.
Если число x не является степенью двух, например 0110. x-1 - 0101, а и дает 0100.
Для всех комбинаций в пределах 0000 - 1111 это приводит к
X X-1 X && X-1
0000 1111 0000
0001 0000 0000
0010 0001 0000
0011 0010 0010
0100 0011 0000
0101 0100 0100
0110 0101 0100
0111 0110 0110
1000 0111 0000
1001 1000 1000
1010 1001 1000
1011 1010 1010
1100 1011 1000
1101 1100 1100
1110 1101 1100
1111 1110 1110
И нет необходимости в отдельной проверке на 1.
Ну, первый случай будет проверять на 20 == 1.
В остальных случаях играет роль num & (num - 1):
Это говорит, что если вы берете какое-либо число, и замаскируйте биты с одного нижнего, вы получите один из двух случаев:
, если число уже равно двум, тогда одно меньше приведет к двоичному числу, биты заказа. Используя & ничего не будет делать. Пример с 8: 0100 & (0100 - 1) -> (0100 & 0011) -> 0000, если число не равно двум из двух, тогда одно меньше не будет касаться наивысшего бита, поэтому результат будет по меньшей мере наибольшей мощностью из двух меньше, чем num. Пример с 3: 0011 & (0011 - 1) -> (0011 & 0010) -> 0010 Пример с 13: 1101 & (1101 - 1) -> (1101 & 1100) -> 1100Таким образом, фактическое выражение находит все, что не является силой двух, в том числе 2 0 .