C
字節交換問題(按位運算)
我看過一些按位運算練習題(用 C 語言),有一個我不明白:您必須僅使用按位運算交換特定整數“x”中的第 n 個和第 m 個字節,並且 n 和 m都是<=3。該解決方案涉及根據 x >> (n<<3) 到 x >> (m<<3) 屏蔽由 xor 產生的數字的最後 8 位,但我不明白的部分是它們為什麼移動 m/ n 對 3。
因為 if
n
是字中的一個位置,以字節為單位,那麼在位中8*n
是相同的位置。與(2 3 = 8)相同。n<<3``8*n
使用
n=1
,n<<3
is8
, and(x >> (n << 3)) & 0xff
會將第二低字節移動到底部位置,並將其餘的字屏蔽掉。(當然,字節將從零開始編號。)(我假設字節為 8 位,因為我認為這是迄今為止最常見的情況,至少現在是這樣。)