Eric Eric - 1 year ago 64
C++ Question

Is there a clever way to "double up" bits in an integer?

Say I have the binary number


Is there a set of trivial arithmetic operations that will produce
, where every bit of the first word is repeated twice?

Does such a trivial function exist to repeat bits 3, 4, or N times?

Answer Source

Have a look at this document:

It describes interleaving two 16-bit numbers, and it's fairly trivial to extend it to 32-bit numbers (this creating a 64-bit number). You just continue the pattern for one extra cycle. Like this:

static const unsigned long long B[] = {
static const unsigned int S[] = {1, 2, 4, 8, 16};

unsigned long long x; // x must initially fit inside 32 bits
unsigned long long z; // z gets the result of x interleaved with itself

x = (x | (x << S[4])) & B[4];
x = (x | (x << S[3])) & B[3];
x = (x | (x << S[2])) & B[2];
x = (x | (x << S[1])) & B[1];
x = (x | (x << S[0])) & B[0];

z = x | (x << 1);
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download