我有 2 段类似的代码,它们接受一个数字并返回 2 的下一个幂。它们返回相同的结果,直到 1e9,如果更大,第二个函数返回不正确的答案,为什么会这样?
unsigned long long nextPowerOf2(unsigned long long n)
{
unsigned long long p = 1;
if (n && !(n & (n - 1)))
return n;
while (p < n)
p <<= 1;
return p;
}
unsigned long long nextPowerOf(unsigned long long n) //returns incorrect answer if n>1e9
{
unsigned long long count = 0;
if (n && !(n & (n - 1)))
return n;
while( n != 0)
{
n >>= 1;
count += 1;
}
cout << "weird?: " << count << endl;
return (1 << count);
}
问题是返回 (1 << count) 会溢出,您需要按照评论中的说明进行转换。所以
return (1ULL << count);
修复它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句