2的下一次幂

时间:2021-03-27 16:28:17

标签: c++

我有 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 个答案:

答案 0 :(得分:0)

问题是返回 (1 << count) 会溢出,您需要按照评论中的说明进行转换。 所以

return (1ULL << count);

修复它。

相关问题