Search code examples
c++bit-manipulationbitwise-operators

Get highest number with n bits


I'd like to get the highest number with n bits in C++. I've written this piece of code but maybe there is a more efficient way.

int A = 22;  // 10110
int max = pow(2, (int) log2(A) + 1) - 1;  // returns 31 (11111)

This code raises 2 to the power of the number of bits of A and subtracts 1.

Edit

Since the question seems unclear here are some more examples to help understand the result I want to achieve.

  • 1000 => 1111
  • 1010 => 1111
  • 100001 => 111111
  • 111 => 111

Solution

  • First, implement log2 using How to do an integer log2() in C++? . Then shift to the position one more than the highest bit, and then subtract one to get all bits set.

    int A = 22;
    unsigned max = (1u << std::bit_width((unsigned)A)) - 1;
    

    Note: this will work up to around UINT_MAX >> 1, as 1u << will overflow.