我有一个函数可以切换每个十六进制数字的第 0 位和第 3 位,但它使用 26 次操作。我只想将其减少到 1 到 25 次操作。仅使用位运算! ~ & ^ | + << >>.
int swap30(int x) {
int m = 0b10001000 << 24;
int m1 = 0b10001000 << 16;
int m2 = 0b10001000 << 8;
int m3 = 0b10001000;
int mask1 = m | m1 | m2 | m3;
int z = 0b01100110 << 24;
int z1 = 0b01100110 << 16;
int z2 = 0b01100110 << 8;
int z3 = 0b01100110;
int mask2 = z | z1 | z2 | z3;
int y = 0b00010001 << 24;
int y1 = 0b00010001 << 16;
int y2 = 0b00010001 << 8;
int y3 = 0b00010001;
int mask3 = y | y1 | y2 | y3;
int three = x & mask1;
int stable = x & mask2;
int one = x & mask3;
int final2 = ((three >> 3) & mask3) | stable | (one << 3);
return final2;
}
最佳答案
return (x & 0x66666666) | ((x >> 3) & 0x11111111) | ((x & 0x11111111) << 3);
关于c - 减少操作次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185351/