我有 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);
}
答案 0 :(得分:0)
问题是返回 (1 << count) 会溢出,您需要按照评论中的说明进行转换。 所以
return (1ULL << count);
修复它。