<返回更多

在JavaScript中进行位移时,16位值变为负值

2023-04-04  今日头条  火龙果他爸
加入收藏

当我尝试移位16位值时,我看到一些奇怪的行为

 

0xF << 4 == 0xF0 // true

0xFF << 8 == 0xFF00 // true

0xFFF << 12 == 0xFFF000 // true

0xFFFF << 16 == 0xFFFF0000 // false

最后一个为真的原因是0xFFFF << 16实际上给出了值-65536 。 当0xFFFF0000是JAVAScript中的有效数字时,为什么会发生这种情况

最满意答案

因为JavaScript使用带符号的32位整数数字进行按位运算。

 

这意味着,数字可能是负数。

要获得所需的输出,必须使用>>> 0删除符号。

(0xFFFF << 16) >>> 0 == 0xFFFF0000

附:进制之间转换

js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现:

//10进制转为16进制
(10).toString(16) // =>"a"
//8进制转为16进制
(012).toString(16) // =>"a"
//16进制转为10进制
(0x16).toString(10) // =>"22"
//16进制转为8进制
(0x16).toString(8) // =>"26"
//10进制转为2进制 //=>
(1111).toString(2) // => "10001010111"
//8进制转为2进制 //=>
(01111).toString(2) //=>"1001001001"
//16进制转为2进制 //=>
(0x16).toString(2) // => "10110"

如果要处理2进制到10进制,16进制到10进制,8进制到10进制, 需要用了paresInt这个方法:

//2进制到10进制;
parseInt(10,2) //=>2
//2进制到10进制;
parseInt(100,2) //=>4
//16进制到10进制
parseInt(12, 16) //=>18
//8进制到10进制
parseInt(12,8); //=>10
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>