seb*_*ine 6 javascript bitwise-operators
我有以下代码:
var a = parseInt('010001',2);
console.log(a.toString(2));
// 10001
var b = ~a;
console.log(b.toString(2));
// -10010
Run Code Online (Sandbox Code Playgroud)
〜对每个位执行NOT运算符.不是a得到a的倒置值(也就是一个补码).
因此010001应返回此101110.
所以我无法理解我们如何获得-10010?唯一可能的解释是:
010001被否定101110但是他写了这个-10001然后由于一个不明原因他给了我两个补语,-10001变成-10010.
但是在我看来,这一切都非常模糊,你是否会对精确发生的事情有所了解.
在幕后,当 Javascript 执行按位运算时,它会转换为 32 位有符号整数表示形式,并使用它,然后将结果转换回其内部十进制表示形式。
因此,您的输入值010001变为00000000 00000000 00000000 00010001。
然后将其反转:
~00000000 00000000 00000000 00010001 => 11111111 11111111 11111111 11101110
Run Code Online (Sandbox Code Playgroud)
转换成十六进制,取反后的值为0xFFFFFFEE,相当于十进制值-18。
由于这是一个值为 -18 的有符号整数,因此 JavaScript将该值转换为底层十进制表示形式 -18。
当 Javascript 尝试将其打印为以 2 为基数的数字时,它会看到负号和值 18,并将其打印为-10010,因为10010是正 18 的二进制表示形式。