x の 0 の数が奇数の場合に 1 を返すように、ビット文字列のパリティを見つけようとしています。
私は基本的なビット単位の操作しか使用できず、これまでのところほとんどのテストに合格していますが、次の2つのことを疑問に思っています:
x ^ (x + ~1) が機能するのはなぜですか? 私はこれに出くわしましたが、ビット数が奇数の場合は1、偶数の場合は何かを与えるようです。7 = 0b0111 であるため、7^6 = 1 と同様
これは、これに対する問題解決の正しい方向ですか? 私の問題は、特定の 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;
}