#include <iostream>
unsigned int roundToNextPowerOf2(unsigned int n) {
if (n == 0) return 1;
n--; // Decrement to handle exact powers of 2
// (if n = 8, we return 8, not 16)
/*
Use bitwise OR and right shifts to "fill" all bits below the highest set bit.
This transforms n into a number where all bits below the highest bit are set to 1.
For example, if n = 21 (binary 10101), after these operations, it becomes 11111 (binary 31).
*/
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return n + 1;
}
int main() {
unsigned int num = 21;
std::cout << "Next power of 2: " << roundToNextPowerOf2(num) << std::endl;
}
/*
run:
Next power of 2: 32
*/