当我尝试移位16位值时,我看到一些奇怪的行为
【在JavaScript中进行位移时,16位值变为负值】
0xF << 4 == 0xF0 // true0xFF << 8 == 0xFF00 // true0xFFF << 12 == 0xFFF000 // true0xFFFF << 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
推荐阅读
- 用AI“—键脱衣”?马斯克们担忧的事正在发生!
- JavaScript前端通过文件流下载文件
- 如何在 Ubuntu 22.04 上安装 CRI-O 容器运行时
- 在卧室能随便点香吗?点香的注意事项,99%的人不知道
- 女人在这三件事情上不拒绝你,就是在等你来“撩”
- 轻松约女人出来的6种方法,坏男人都知道
- 交往中,男人这3个方面越“厉害”越让女人念念不忘
- 图文了解人体与甲流和新冠病毒的战争:病毒有帮手,你有吗?
- 用这3个技巧满足,轻而易举打动女人
- 王宝强|清华毕业生模仿树先生,成60万粉丝网红,却陷在了树先生的人生里