Cracking the coding interview--Q5.4

January 4, 2013
作者:Hawstein
出处:http://hawstein.com/posts/5.4.html
声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。



题目

原文:

Explain what the following code does: ((n & (n-1)) == 0).

译文:

解答以下代码的作用:((n & (n-1)) == 0)

解答

这个比较简单,代码的作用是判断一个数是否为2的整数次幂。题目中的判断代码不够严谨, 因为当n=0时,上述条件为真,但0并不是2的幂。所以,上述语句可以修改为:

(n > 0) && ((n & (n-1)) == 0)

更多关于位操作的介绍及技巧请看:

C/C++位操作

全书题解目录:

Cracking the coding interview–问题与解答

全书的C++代码托管在Github上:

https://github.com/Hawstein/cracking-the-coding-interview