您的位置:首页 > 其它

如何快速判断一个数是不是2幂数

2014-11-11 10:33 274 查看
现代的计算机是二进制的,在许多地方都要用到2的幂数,比如4,8,16,32,64,128等这些数字。并且在许多内存分配函数也是以这些数字为值进行分配的。那么如何快速判断一个数是不是2的幂数呢?
今天在看内核代码的时候,发现内核中是这样做的,其思想也是非常的简单!
基本思想是:

十进制表示 二进制表示

4 100
3 011

8 1000
7 0111

16 10000
15 01111

32 100000
31 011111
通过观察以上的几个2的幂数的二进制以及比他们小一的数的二进制形式,会发先:
如果n是2的幂数的话,那么n的二进制形式中只能有一个1存在,而 n-1 则有2的对数个连续的 1;
所以,判断一个数是否是2的幂数的代码如下:

bool is_power_of_2(int n)
{
return ( n != 0 && ( n & (n-1) ) == 0 )

}
首先:判断 n 是否为 0, 如果是 0 的话,返回0表示不是2的幂数
如果不是0的话, 如果 n 为 2的幂数的话, n & (n-1)结果为 0
如果 n不为2的幂数的话, n & (n-1)结果不为0

本文出自 “阿辉仔” 博客,请务必保留此出处http://weiguozhihui.blog.51cto.com/3060615/1575226
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: