Эта функция используется для вычисления XOR 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;
}
. Это прекрасно работает, когда XOR '8-битные значения, но сначала их нужно привести к int, то есть
char byte1 = 0x23, byte2 = 0x34;
int result = xor32int((int)byte1, (int)byte2);
И, учитывая, что xor32int()
предполагает, что входные данные равны 32-битным целым, он запускает цикл 32 раза, поэтому даже если значение только 8-битное, он запускает дополнительные циклы, когда в этом нет необходимости, что приводит к значительному снижению производительности.
Как бы я мог преобразовать функцию xor32int()
, чтобы она работала только с 8-битными значениями, чтобы не нужно было зацикливаться 32 раза?
Если вам интересно, почему я просто не могуиспользуйте оператор XOR, потому что я работаю со старой машиной, которая использует процессор, который не поддерживает XOR.