码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-09-17 20:12:32      阅读:437      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   strong   div   sp   log   on   c   

用一个表达式,判断一个数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,…),不可用循环语句

标签:style   blog   color   strong   div   sp   log   on   c   

原文地址:http://www.cnblogs.com/freeso/p/3977635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!