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
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.