理解JavaScript按位NOT运算符和toString()函数

14 javascript bit-manipulation operator-overloading

提前感谢大家 -

alert((~1).toString(2));
Run Code Online (Sandbox Code Playgroud)

输出: -10

但是在PHP/Java中它输出11111111111111111111111111111110

我错过了什么,为什么Javascript会在输出中添加" - "?

谢谢,山姆

IRB*_*BMe 9

我知道Java用二进制补码表示负数,而11111111111111111111111111111111用二进制表示,这就是~1给出的,代表-2.或者,用二进制表示带负号-10,这就是你得到的.

使用二进制补码计算负数10(在基数2中)的方法是首先反转所有位,给出:

11111111111111111111111111111101

然后你加1,给你:

11111111111111111111111111111110

我想在Javascript中也会发生同样的事情.


Bre*_*ble 9

在转换为二进制文件之前,您可以使用shift运算符>>>将数字转换为无符号整数:

(~1 >>> 0).toString(2) // "11111111111111111111111111111110"
Run Code Online (Sandbox Code Playgroud)