移位运算符仅在移位到16位时才起作用

问题描述

我一直都在努力寻找答案,因此很高兴结束该问题(如果重复的话)。我想获得具有8位数字的十六进制数字的前2位数字。

我知道gtest.cc将x位向右移动。因此,>>最终会在0b10 >> 1

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

0b01

从右边开始的第3和第4个十六进制数字:

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

第5个和第6个十六进制从右开始:

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

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

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

如何让0xff000000 >> 24 0b11111111000000000000000000000000 >> 24 => Should be 255,but it is -1 达到255?

解决方法

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...