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

当我尝试移位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





    推荐阅读