1:简单除法
int i = 128; //待判断的整数 int count = 1; //待判断的整数是2的count次方while (i){ if (2 == i){ printf("YES: %d\n",count);break;}if (0 == i%2){ i /= 2;count++;}else{ printf("NO\n");break;}}2:16进制中1有几个
大家发现没有,凡是2的n次方的整数,它的二进制的所有位中都只有一个1,并且这个1肯定在最高位。既然这样的话,那么这个问题就变成了如何来计算二进制位中1的个数,对于这个计算算法,《编程之美——微软技术面试心得》这本书中讲了三种方法,都很精辟,这儿我贴出其中一种的判断方法,如下:
int fuc(int i){ int count = 0; while(i) { count += i&0x01; i >>= 1; } if(count < 2) { printf("YES"); //若count = 0 或者 count =1,表明 i 是 2 的n次方 } else { printf("NO"); } }最简单法:
int fuc(int i){ return ((i > 0) && ((i & (i - 1)) == 0));//2的n次幂肯定是大于0的}