// 大部分位运算的技巧早在几十年前就被前辈们在有限的计算环境下“榨”出来了。
// “原创”只是表示这篇文章是我所写,并非翻译或转贴,但也绝不是我“首创”。
10进制中,10的幂仅有“最高”位是1,其他均为0。比如:1、10、100、100000
同样,2进制中2的幂也仅有“最高”位是1。而且,如果减去1的话,最高位为0,低位全1。此时a与(a - 1)之间,没有同为1的位。
如果a不是2的正整数幂,那么a除了最高位外,还必有某个低位为1,因此减1不会对最高位做“借位”,所以此时a与(a - 1)最高位均为1。
因此2的幂必有:
(x & (x-1)) == 0
但0也满足这个式子,所以要:
x && !(x & (x - 1))