判断一个数是否是2的n次方
今天面试问了这个问题,脑袋断片了。。。没答上,让我哭会儿。
下面是以为仁兄的解法。我竟然连这个也没想到。
1.一直除2,看最后是否等于1.(最笨的方法)
2.转换成2进制,看是否是这个样子的:1,10,100,1000,10000,就是除了最高位是1,其他都是0,或者说只有一个1.
面试官给出的解法:m & (m - 1) == 0,则m是2的n次方。让我回去想想为什么。
于是回来百度了一下:
如果一个数是2^n,说明这个二进制里面只有一个1。 a = (10000)ba-1 = (01111)ba&(a-1) = 0。如果一个数不是2^n,说明它的二进制里含有多一个1。 a = (1xxx100)ba-1=(1xxx011)b那么 a&(a-1)就是 (1xxx000)b,而不会为0。所以可以用这种方法判断一个数是不2^n。

浙公网安备 33010602011771号