C

字節交換問題(按位運算)

  • March 28, 2019

我看過一些按位運算練習題(用 C 語言),有一個我不明白:您必須僅使用按位運算交換特定整數“x”中的第 n 個和第 m 個字節,並且 n 和 m都是<=3。該解決方案涉及根據 x >> (n<<3) 到 x >> (m<<3) 屏蔽由 xor 產生的數字的最後 8 位,但我不明白的部分是它們為什麼移動 m/ n 對 3。

因為 ifn是字中的一個位置,以字節為單位,那麼在位8*n是相同的位置。與(2 3 = 8)相同。n&lt;&lt;3``8*n

使用n=1, n&lt;&lt;3is 8, and(x &gt;&gt; (n &lt;&lt; 3)) & 0xff會將第二低字節移動到底部位置,並將其餘的字屏蔽掉。(當然,字節將從零開始編號。)

(我假設字節為 8 位,因為我認為這是迄今為止最常見的情況,至少現在是這樣。)

引用自:https://unix.stackexchange.com/questions/509291