我正在閱讀this article用Xor交換各個位以交換給定數字的位。
作爲* 10的交換範圍的示例假設我們有b = 00101111(用二進制表示),並且我們想要將從i = 1開始的n = 3個連續位(右起第二位)與從j = 5開始的3個連續比特;結果將是r = 11100011(二進制)。 *但我無法理解它是如何工作的。
鑑於代碼是用XOR交換各個位
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));
請任何一個清除我如何代碼工作。
我對這個陳述感到困惑((1U << n) - 1)這是什麼意思? – Aalok
1U是數字1.在將其左移n次後,您將得到2^n。 減1是111 ... 1 n次。 –
unsigned int n; //每個序列中的連續位數 –