使用这个位操作符序列时会发生什么?

What happens when using this sequence of bitwise operators

本文关键字:什么 位操作 操作符      更新时间:2023-09-26

我在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位,并将其余全部清除为0。因此,获得最低有效位字节。它也适用于你的情况,因为122小于2^8。用0代替122返回最低有效位字节——122本身。