使用这个按位运算符序列时会发生什么

What happens when using this sequence of bitwise operators

我在 javascript

中遇到了这个函数
function(x) {
    return (x >> 8 << 8) ^ x;
};

它用于将 x 转换为字节表示。我了解按位运算的作用,但是我不明白会发生什么,因为 (122 >> 8 << 8) 打印出 0。

x >> 8

此右移 x 8 次,有效清除最低有效 8 位。

(x >> 8) << 8

这就把上面的数左移了8位。因此,我们得到 x,其中最低有效 8 位设置为 0。 如果x(16位数字)最初是0b0001000101010101,那么先变成0b0000000000010001,最后变成0b0001000100000000.

(x >> 8 << 8) ^ x

这会将上述数字与 x 异或,保留最低有效 8 位不变,并将其余所有位清零。 因此,获得了最低有效字节。 它也适用于您的情况,因为 122 小于 2^8。 Xoring 122 与 0 returns 最低有效字节 - 122 本身。