移位运算符仅在移位到 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)
我整个上午都在努力寻找答案,如果这个问题重复,我很乐意关闭它。我想获得一个有 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)