Следующая программа на 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, в двоичном формате будет установлен только 1 бит
для примера 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):
}
}