Эта функция используется для вычисления 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.
xor32int()
и изменить ее, чтобы она предполагала 8-битный ввод, а не 32-битный ввод. - person Power5   schedule 28.10.201831
на7
? (также лучше использовать типы unsigned с битовыми манипуляциями) - person Galik   schedule 28.10.2018