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