How to round a number to the next power of 2 in C++

2 Answers

0 votes
#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
 
*/

 



answered 3 days ago by avibootz
edited 3 days ago by avibootz
0 votes
#include <iostream>
#include <cmath>

unsigned int roundToNextPowerOf2(unsigned int n) {
    return pow(2, ceil(log2(n)));
}

int main() {
    unsigned int num = 21;
    
    std::cout << "Next power of 2: " << roundToNextPowerOf2(num) << std::endl;
}

 
 
/*
run:
 
Next power of 2: 32
 
*/

 



answered 3 days ago by avibootz
edited 3 days ago by avibootz

Related questions

...