说我有二进制数0b00110101
.
是否会产生一组琐碎的算术运算,0b0000111100110011
第一个单词的每一位都重复两次?
是否存在重复位3,4或N次的这种微不足道的功能?
看看这个文件:
它描述了交织两个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)