在 Javascript 中,如果我对十进制整数 10 进行按位 NOT 运算:
~10
我希望它按位 NOT 对二进制整数进行计算,如下所示:
~1010 = 0101
换句话说,我期望十进制整数 5。相反,该运算给出 -11。 (在您的控制台中尝试一下)
~10 = -11
如果我通过将 -11 和 ~10 作为二进制整数字符串进行更明确的检查:
parseInt(~10,10).toString(2)
"-1011"
parseInt(-11,10).toString(2)
"-1011"
一致。但我不明白。谁能向我解释为什么?我猜这与标志有关。
编辑:I found this question发帖后,也让我更好地理解了这个现象。
最佳答案
Javascript 中的按位运算符将数字视为 32 位。所以 10 是
00000000 00000000 00000000 00001010
当你反转它时,结果是:
11111111 11111111 11111111 11110101
当解释为 32 位有符号数时,即 -11(如果您不明白原因,请阅读 Wikipedia 条目 Two's Complement )。
关于javascript - JS : Why is ~10 (binary, ~1010) = -11 (二进制, -1011)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25070962/