在一家外企面试的时候遇到的题,平时容易被大家忽略,从此也看出一点外企文化:注意细节与基础。
最简的办法:
判断一个正整数 i 是不是2的乘方 只要看 (i & (i - 1))==0 是否为true即可。
原理:
凡是2的乘方的正整数,其二进制数必然是以1为首位,其它位都是0。这时候如果给它减1,(在位数相同的情况下)就会变成首位是0,其它位全部是1的结果,然后用“位与”运算,得到的结果是0,就说明这个正整数是2的乘方。
例如:
2的1次方是2,二进制数为10,(2-1)之后变成1,二进制数为01,进行位与运算(10 & 01)得到的结果是二进制00,就是结果0.
2的2次方是4,二进制数为100,(2-1)之后变成3,二进制数为011,进行位与运算(100 & 011)得到的结果是二进制000,就是结果0.
......