bit — Специальная операция маскирования в переполнении стека

Мне нужно xor каждый биты в переменной, используя c ++
Давайте рассмотрим 4-битные значения a и x, где их битовое представление a = a3a2a1a0 а также x = x3x2x1x0,
Мы определяем операцию маскировки «.» как a.x = a3x3(xor)a2x2(xor)a1x1(xor)a0x0,

Я сделал&х и найти a3x3 a2x2 a1x1 a0x0 теперь мне нужно их исправить, но как? Есть ли особый способ сделать это? лайк ‘&операция? Я искал, но ничего не нашел .. любая помощь будет оценена!

-2

Решение

Вам нужно будет сдвинуть «а и х», чтобы сделать 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

Другие решения

Исходя из вашего описания, конечный результат, который вы собираетесь получить, равен 0 или 1, так как вы завершили anding, вам нужно вычислить, сколько 1 в двоичном представлении результата anding: a&Икс.

Вам нужно сдвинуть биты один за другим и вычислить 1, если конечный результат — нечетное число, то конечный результат равен 1, если даже тогда конечный результат равен 0.

1

По вопросам рекламы [email protected]