判断一个无符号数是否是2的n次幂形式的数时间:2023-01-12 15:13:02这是面试中问到的问题。可以先分析一下2的n次幂形式的数,其二进制形式必然是只有1bit是1,其余bit位都是0 因此一个直观的做法就是跟所有2的n次幂比较,由于我们通常考虑的无符号整型是32位,因此就有32个2的n次幂的数(可以通过将1左移0到31位得到)。这种方法在最坏情况下需要移位并比较32次,效率比较低。 再仔细分析一下可以发现,2的n次幂形式的数,其二进制形式为0...010...0,假设1后面有i个0 (0<=i<=31),则这个数减去1就会出现一个末尾连续i个1的数。例如二进制数0100,这个数减去1等于0011,这两个数的与为0 因此,一个更优的算法是: inline bool is2n(unsigned int i) ... { if(i==0) return false; else return (i&(i-1))==0;}