判断一个数是否是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。

posted @ 2017-04-24 20:58  ren_zhg1992  阅读(459)  评论(0)    收藏  举报