2的下一次幂

约法哈卜

我有 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章