この記事を読ん でいるときに、特定の数値のビットを交換するために Xor を使用して個々のビットを交換しています。
* ビットの範囲をスワップする例として、b = 00101111 (2 進数で表現) があり、i = 1 (右から 2 番目のビット) から始まる n = 3 の連続するビットを 3 つの連続するビットでスワップするとします。 j = 5から始まります。結果は r = 11100011 (バイナリ) になります。*しかし、私はそれがどのように機能しているのか理解できませんでした.
与えられたコードは
unsigned int i, j; // positions of bit sequences to swap
unsigned int n; // number of consecutive bits in each sequence
unsigned int b; // bits to swap reside in b
unsigned int r; // bit-swapped result goes here
unsigned int x = ((b >> i) ^ (b >> j)) & ((1U << n) - 1); // XOR temporary
r = b ^ ((x << i) | (x << j));
このコードがどのように機能しているかを明確にしてください。