【问题标题】:Shift Operator only working when shifting until 16 digits移位运算符仅在移位到 16 位时有效
【发布时间】:2020-12-07 08:54:06
【问题描述】:

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

我了解>> 将 x 位向右移动。所以0b10 >> 1 会以0b01 结束

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

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

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

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

右起第五个和第六个十六进制:

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

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

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

我怎样才能让0b11111111000000000000000000000000变成255?

【问题讨论】:

  • 大声笑,喜欢这个用户名。 90年代参考! :-)

标签: javascript binary hex shift


【解决方案1】:

答案很简单,>> 运算符是signed shift operator,因此您只需使用an unsigned version >>>

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2012-11-12
    • 2013-01-25
    • 2010-10-02
    • 1970-01-01
    • 2014-05-26
    • 2011-02-02
    相关资源
    最近更新 更多