使用经典代码段:
如果(x&(x-1))== 0
如果答案是1,则它是错误的,而不是2的幂。但是,对5(不是2的幂)和4进行运算会得到:
0001 1111 0001 1111 0000 1111
那是4 1s。
在8和7上工作:
1111 1111 0111 1111
0111 1111
0是第一个,但我们有4。
对于这两种情况,在此链接(http://www.exploringbinary.com/ten-ways-to-check-if-an-integer- is-a-power-of-two-in-c/)中,答案开始为0,并且变量数为0s / 1s。这如何回答数字是否为2的幂?
您需要重新了解二进制文件的工作方式。5未表示为0001 1111(5位在),它表示为0000 0101(2 ^ 2 + 2 ^ 0),而4同样不是0000 1111(在4位在),而是0000 0100(2 ^ 2)。您写的数字实际上是 一元的 。
像往常一样,维基百科具有相当全面的概述。