字节交换问题(按位运算)

字节交换问题(按位运算)

我看过一些按位运算练习题(C 语言),其中有一道我看不懂:你必须使用按位运算交换特定整数“x”中的第 n 个字节和第 m 个字节,并且 n 和 m 都 <=3。解决方案涉及屏蔽基于 x >> (n<<3) 到 x >> (m<<3) 的异或结果数字的最后 8 位,但我不明白的是他们为什么将 m/n 右移 3 位。

答案1

因为 ifn是单词中的一个位置,以字节为单位,那么8*n是同一个位置以位为单位。与(2 3n<<3 = 8)相同。8*n

使用n=1n<<3is8(x >> (n << 3)) & 0xff会将第二个最低字节移动到底部位置,并屏蔽该字的其余部分。 (当然,字节从零开始编号。)

(我假设字节为 8 位,因为我认为至少现在这是迄今为止最常见的情况。)

相关内容