首页 > 代码库 > 用一个表达式,判断一个数X是否是2^N(2,4,8,16,…),不可用循环语句

用一个表达式,判断一个数X是否是2^N(2,4,8,16,…),不可用循环语句

用一个表达式,判断一个数X是否是2^N(2,4,8,16,…),不可用循环语句

答案:!(X & (X - 1))

分析:2^N(2,4,8,16)这样的数转化成二进制是10、100、1000、10000。

         若X-1与X做与运算,结果是0,则X是2^N。

扩展:求一个整数的二进制形式中包含1的数量

 1 int func(int x) 2 { 3     int count = 0; 4     while(x) 5     { 6         count ++; 7         x = x & (x - 1); 8     } 9     return count;10 }

 

用一个表达式,判断一个数X是否是2^N(2,4,8,16,…),不可用循环语句