Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fill with variable number of ones

What's the best way to fill a variable with an unknown (at compile time) number of ones? For example, let's say:

int n = 5;
int b = fillwithones(5);

now b contains 11111 (in binary).

I can't just hard code int b = 31 because n is not known ahead of time (in my application).

I could do something like this:

int b = pow(2, n) - 1

But using a pow seems very wasteful.

Thanks!

like image 626
Peter Avatar asked Oct 27 '11 16:10

Peter


1 Answers

You can use left shift and then subtract 1:

unsigned int b = (1U << n) - 1U;

// Broken down into steps
//  1           = 00000001b
//  1 << 5      = 00100000b
// (1 << 5) - 1 = 00011111b

The reason this works is 1 shifted left n times is the same as 2n, as each sole bit position represents a power of 2.

like image 178
user7116 Avatar answered Oct 04 '22 02:10

user7116