Я пытаюсь найти четность строки битов, поэтому что он возвращает 1, если x имеет нечетное # 0.
Я могу использовать только базовые побитовые операции, и то, что у меня есть, проходит большинство тестов, но меня интересуют две вещи:
Почему работает x ^ (x + ~ 1)? Я наткнулся на это, но, похоже, он дает вам 1, если есть нечетное количество бит, и что-то еще, если есть четное. Как 7 ^ 6 = 1, потому что 7 = 0b0111
Правильно ли это направление решения проблемы? Я предполагаю, что моя проблема возникла из-за первой операции, в частности (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;
}