Мне нужно xor каждый биты в переменной, используя c ++
Давайте рассмотрим 4-битные значения a и x, где их битовое представление a = a3a2a1a0
а также x = x3x2x1x0
,
Мы определяем операцию маскировки «.» как a.x = a3x3(xor)a2x2(xor)a1x1(xor)a0x0
,
Я сделал&х и найти a3x3 a2x2 a1x1 a0x0
теперь мне нужно их исправить, но как? Есть ли особый способ сделать это? лайк ‘&операция? Я искал, но ничего не нашел .. любая помощь будет оценена!
Вам нужно будет сдвинуть «а и х», чтобы сделать xor всех битов.
Что-то вроде:
uint32_t a = 0xa;
uint32_t x = 0xb;
uint32_t tmp = a & x; // Bitwise AND of a and x
uint32_t res = 0;
for (int i = 0; i < 32; ++i)
{
res = res ^ (0x1 & tmp); // Only include LSB of tmp in the XOR
tmp = tmp >> 1; // Shift tmp to get a new LSB
}
cout << "Result: " << res << endl;
Альтернативное решение может быть:
uint32_t a = 0xa;
uint32_t x = 0xb;
uint32_t tmp = a & x; // Bitwise AND of a and x
uint32_t res = 0;
while (tmp > 0)
{
if ((tmp % 2) == 1) res = (res + 1) & 0x1; // XOR operation
tmp = tmp/2; // Shift operation
}
cout << "Result: " << res << endl;
Исходя из вашего описания, конечный результат, который вы собираетесь получить, равен 0 или 1, так как вы завершили anding, вам нужно вычислить, сколько 1 в двоичном представлении результата anding: a&Икс.
Вам нужно сдвинуть биты один за другим и вычислить 1, если конечный результат — нечетное число, то конечный результат равен 1, если даже тогда конечный результат равен 0.