N=7 ans is 2 , 2*2
N=20 ans is 4, 2*2*2*2
类似我想查看next power of 2
For Ex:
N=14 Ans=16
没有使用for
循环,是否有任何Bit Hack?
就像我们有一个单行解决方案来检查它是否是2 X&(X-1)==0
的幂,类似的那样?
答案 0 :(得分:2)
GCC有一个名为__builtin_clz()
的内置指令,它返回整数中前导零的数量。例如,假设一个32位int
,表达式p = 32 - __builtin_clz(n)
将告诉您存储整数n
需要多少位,而1 << p
将为您提供下一个最高功率2(当然,提供p
<32)。
还有一些与long
和long long
整数一起使用的等效函数。
或者,math.h
定义一个名为frexp()
的函数,它返回双精度数的base-2指数。这可能效率较低,因为在将整数传递给此函数之前,必须将整数转换为双精度值。
答案 1 :(得分:0)