【发布时间】:2018-10-28 10:48:47
【问题描述】:
该函数用于计算32位整数的异或
int xor32int(int x, int y)
{
int res = 0; // Initialize result
// Assuming 32-bit Integer
for (int i = 31; i >= 0; i--)
{
// Find current bits in x and y
bool b1 = x & (1 << i);
bool b2 = y & (1 << i);
// If both are 1 then 0 else xor is same as OR
bool xoredBit = (b1 & b2) ? 0 : (b1 | b2);
// Update result
res <<= 1;
res |= xoredBit;
}
return res;
}
这在对 8 位值进行异或运算时可以正常工作,但首先需要将它们强制转换为 int,即
char byte1 = 0x23, byte2 = 0x34;
int result = xor32int((int)byte1, (int)byte2);
由于xor32int() 假定输入为 32 位整数,它会运行 32 次循环,因此即使值只有 8 位,它也会在不必要时运行额外的循环,从而导致性能大幅下降。
我将如何转换 xor32int() 函数,使其仅适用于 8 位值,因此不需要循环 32 次?
如果您想知道我为什么不简单地使用 XOR 运算符,那是因为我正在使用一台旧机器,它使用不支持 XOR 的处理器。
【问题讨论】:
-
你有 & 运算符但没有 ^ ?不确定我是否理解问题
-
@OznOg 是的,某些 CPU 不支持 XOR,但它们支持 AND、OR 等。但这不是问题所在。这个问题只是询问我将如何使用
xor32int()函数并对其进行更改,使其假定为 8 位输入而不是 32 位输入。 -
你不能把
31改成7吗? (也最好使用带有位操作的 unsigned 类型)