#include <stdio.h>
#include <stdlib.h>
int isPowerOf2(int x);
int biggestPowerOf2(int x);
int setBit(int n, int bit);
int main(int argc, char *argv[]){
if(argc < 2){
fprintf(stderr, "Usage %s <number>\n", argv[0]);
exit(1);
}
int a, pwr2;
a = atoi(argv[1]);
if(a < 0){
printf("Enter a positive number\n");
exit(1);
}
if(isPowerOf2(a) == 1){
printf("%d is a power of 2\n", a);
} else {
pwr2 = biggestPowerOf2(a);
printf("Largest power of 2 smaller than %d is %d\n", a, pwr2);
}
return 0;
}
int isPowerOf2(int x){
int bit, count = 0;
for(int i = 31; i >= 0; i--){
bit = (x >> i) & 1;
if(bit == 1)
count++;
if(count > 1)
return 0;
}
return 1;
}
int biggestPowerOf2(int x){
int bit, p = 0;
for (int i = 31; i >= 0; i--){
bit = (x >> i) & 1;
if(bit == 1){
p = setBit(p, i);
break;
}
}
return p;
}
int setBit(int n, int bit){
return n | 1 << bit;
}