使用这个按位运算符序列时会发生什么
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 本身。
我在 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 本身。