This program is to check whether a given number is power of 4
Condition for a number to be power of 4:
- If the number of bit set is 1
- The number of unset bit before the first set is even
Example:
number: 16 = 0001 0000
Here number of bit set is 1 and clear bit before set bit is 4(even)
Implementation:
#include <stdio.h>
#define MAX_BIT (sizeof(int) * 8)
int display_binary(unsigned int num)
{
int i;
for(i = MAX_BIT-1; i>=0; i--)
{
if((num >> i)&1)
printf("1");
else
printf("0");
}
}
int is_power_4(int num)
{
int i =0;
int set=0;
int unset =0;
for (i; i < MAX_BIT; i++)
{
if ((num >>i) &1)
set++;
else
{
if(!set)
unset++;
}
}
if(set ==1 && unset %2 ==0)
return 1;
else
return 0;
}
int main()
{
unsigned int num, pos;
printf("\n Enter the number: ");
scanf("%d", &num);
int res = is_power_4(num);
if(res)
printf("\n The number: %d is power of 4\n", num);
else
printf("\n The number: %d is not power of 4\n", num);
printf("\n Binary of a number is: ");
display_binary(num);
return 0;
}
Output:
Enter the number: 16
The number: 16 is power of 4
Binary of a number is: 00000000000000000000000000010000
Second Approach:
This approach is more efficient. The number is power of 4, if:
- if it is a power of 2 that is (n & n-1) =0 and
- The only bit set is at the odd position so that number of number of bit clear before the first set bit is always even.
#include <stdio.h>
#define MAX_BIT (sizeof(int) * 8)
int display_binary(unsigned int num)
{
int i;
for(i = MAX_BIT-1; i>=0; i--)
{
if((num >> i)&1)
printf("1");
else
printf("0");
}
}
int main()
{
unsigned int num, pos;
printf("\n Enter the number: ");
scanf("%d", &num);
if (num !=0 && ((num & (num-1)) ==0) && (num & 0xAAAAAAAA)==0)
printf("\n The number: %d is power of 4\n", num);
else
printf("\n The number: %d is not power of 4\n", num);
printf("\n Binary of a number is: ");
display_binary(num);
return 0;
}
Output:
Enter the number: 17
The number: 17 is not power of 4
Binary of a number is: 00000000000000000000000000010001
Example: 16
0000 0000 0000 0000 0000 0000 0001 0000 =0X10
&
0101 0101 0101 0101 0110 0101 0101 0101 = 0XAAAAAAAA
—————————————————————–
0000 0000 0000 0000 0000 0000 0000 0000
Categories: C Language
Leave a Reply