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