【非递归】判断一个整数是否能表示成2的指数形式(已附weapon0916兄的高效解法)

来源:互联网 发布:小球发射java源代码 编辑:程序博客网 时间:2024/06/03 16:54

问:判断一个整数是否能表示成2的指数形式

思路:若x是2的指数倍的整数,那它的二进制位串中只有一位是1。

 

weapon0916兄的意见很有见地,我后来又自己细想了一下,代码改为

 

原因我是这样想的:若x是2的指数倍的整数,那它的二进制位串中只有一位是1。即是说,其他非2的幂次的数—假设是y—的比特串都包含2个以上的1,那么,当n-1时,x位串上的那个1要么移位(向高位借位),要么消失;而y最右边的那个1可能消失(处于0位)也可能向左移(向高位借位),但最左边的那个1一定不会有任何改变,所以x&(x-1) == 0 而 y&(y-1) != 0。