I have 2 similar pieces of code which take a number and return the next power of 2 They return the same result up until 1e9, any larger and the second function returns an incorrect answer, why is that?
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);
}