是否有一种聪明的方法可以在整数中"加倍"位?

Eri*_*ric 7 c++ math binary

说我有二进制数0b00110101.

是否会产生一组琐碎的算术运算,0b0000111100110011第一个单词的每一位都重复两次?

是否存在重复位3,4或N次的这种微不足道的功能?

pad*_*ddy 9

看看这个文件:

https://web.archive.org/web/20140629081102/http://www-graphics.stanford.edu/~seander/bithacks.html#InterleaveBMN

它描述了交织两个16位数字,将它扩展为32位数字(这创建了一个64位数字)是相当简单的.您只需继续该模式一个额外的周期.像这样:

static const unsigned long long B[] = {
    0x5555555555555555,
    0x3333333333333333,
    0x0F0F0F0F0F0F0F0F,
    0x00FF00FF00FF00FF,
    0x0000FFFF0000FFFF
};
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);
Run Code Online (Sandbox Code Playgroud)