Advertisements

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.

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