Специальная маскирующая операция в с ++

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

Я сделал A & X и найти 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 или 1, так как вы завершили anding, вам нужно вычислить, сколько 1 в двоичном представлении результата anding: a&x.

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

Другие вопросы по тегам