我看过一些按位运算练习题(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=1
、n<<3
is8
和(x >> (n << 3)) & 0xff
会将第二个最低字节移动到底部位置,并屏蔽该字的其余部分。 (当然,字节从零开始编号。)
(我假设字节为 8 位,因为我认为至少现在这是迄今为止最常见的情况。)