javascript - JS : Why is ~10 (binary, ~1010) = -11 (二进制, -1011)?

标签 javascript binary bitwise-operators signed twos-complement

在 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/

相关文章:

javascript - D3.js force directed graph,通过使边缘相互排斥来减少边缘交叉

javascript - 如何在 Express Nodejs 上提取路由名称(路径)(在调用期间,从 req 中)

javascript - 防止多次意外的 PHP 表单提交

javascript - jQuery 在表单提交之前检查用户的输入

parsing - F# 中是否有任何已知的解析器组合库可以解析二进制(非文本)文件?

c# - 如何在 C# 中将按位非运算符与移位运算符一起使用?

c++ - 在 C/C++ 中高效地在十六进制、二进制和十进制之间转换

c - C语言中如何将字节转换为二进制

c - C 中二进制表示的按位运算符

javascript - 按位 AND OR 和 XOR 如何处理 -negative 有符号整数?