我正在做这个编程项目,其中一部分是编写一个只使用位运算符的函数,每两位切换一次。我想出了一种梳状算法来实现这一点,但它只适用于无符号数,有什么想法可以让它也适用于有符号数吗?我完全被这个难住了。继承人我到目前为止:
// Mask 1 - For odd bits
int a1 = 0xAA; a1 <<= 24;
int a2 = 0xAA; a2 <<= 16;
int a3 = 0xAA; a3 <<= 8;
int a4 = 0xAA;
int mask1 = a1 | a2 | a3 | a4;
// Mask 2 - For even bits
int b1 = 0x55; b1 <<= 24;
int b2 = 0x55; b2 <<= 16;
int b3 = 0x55; b3 <<= 8;
int b4 = 0x55;
int mask2 = b1 | b2 | b3 | b4;
// Mask Results
int odd = x & mask1;
int even = x & mask2;
int newNum = (odd >> 1) | (even << 1);
return newNum;
通过将变量或变量组合在一起手动创建掩码是因为唯一可以使用的常量在 0x00-0xFF 之间。