Битовый код четности для нечетного числа битов

Я пытаюсь найти четность строки битов, поэтому что он возвращает 1, если x имеет нечетное # 0.
Я могу использовать только базовые побитовые операции, и то, что у меня есть, проходит большинство тестов, но меня интересуют две вещи:

  1. Почему работает x ^ (x + ~ 1)? Я наткнулся на это, но, похоже, он дает вам 1, если есть нечетное количество бит, и что-то еще, если есть четное. Как 7 ^ 6 = 1, потому что 7 = 0b0111

  2. Правильно ли это направление решения проблемы? Я предполагаю, что моя проблема возникла из-за первой операции, в частности (x + ~ 1), потому что она приведет к переполнению некоторых двух дополнительных чисел. Благодарности

Код:

int bitParity(int x) {
    int first = x ^ (x + ~1);
    int second = first ^ 1; // if first XOR gave 1 you'll return 0 here
    int result = !!second;
return result;
}
7
задан Vicky 23 September 2011 в 15:01
поделиться