移位运算符仅在移位到 16 位时有效

Shift Operator only working when shifting until 16 digits

我整个上午都在努力寻找答案,如果这个问题重复,我很乐意关闭它。我想获得一个有 8 位数字的十六进制数的前 2 位数字。

我知道 >> 向右移动 x 位。所以 0b10 >> 1 最终会变成 0b01

最后 6 位数字全部有效。 最后 2 个十六进制数:

0x000000FF >> 0 // 255
0b00000000000000000000000011111111 >> 0 == 0b00000000000000000000000011111111 // == 255

右起第 3 个和第 4 个十六进制数字:

0x0000ff00 >> 8 // 255
0b00000000000000001111111100000000 >> 8 == 0b00000000000000000000000011111111 // == 255

右起第 5 个和第 6 个十六进制:

0x00ff0000 >> 16
0b00000000111111110000000000000000 >> 16 == 0b00000000000000000000000011111111 // == 255

尝试从右边获取第 7 个和第 8 个十六进制数,或者从左边开始的第 2 个应该将所有位向右移动 24 位:

0xff000000 >> 24
0b11111111000000000000000000000000 >> 24 => Should be 255, but it is -1

怎样才能让0b11111111000000000000000000000000变成255?

答案很简单,>>运算符是signed shift operator, so instead you would simply use an unsigned version >>>:

console.log(0xff000000 >> 24)
console.log(0xff000000 >>> 24)