为什么Javascript把数字当作二进制补码处理

4
这里是关于为什么~5等于-6的解释,来自这里

5 = 0000 0101

取反 (~5) = 1111 1010

那么,1111 1010代表哪个数字呢?由于第一个数字是1,我们知道它是负数。要找出它的值,可以执行以下操作:

-(flip(1111 1010) + 1) = -(0000 0101 + 1) -(0000 0110) = -6

我想知道为什么JavaScript将~5的结果视为以二进制补码形式表示的数字?

我的困惑在于,如果我在控制台中写入0b11111010,它会计算为250,而不是-6。


你的问题归结为“为什么Javascript中的整数是有符号的?” - Oliver Charlesworth
我的困惑源于这样一个事实:如果我在控制台中写入0b11111010,它的计算结果是250,而不是-6。 - Max Koretskyi
那是因为整数不是8位的。 - Oliver Charlesworth
你能详细解释一下吗? - Max Koretskyi
“5”是一个整数,正如Oliver所指出的那样,它不是8位。另一方面,“0b11111010”是一个8位二进制数。 - IMTheNachoMan
1个回答

5
因为这是JavaScript在二进制中表示负数的方式。文档(Docs)如下所述:所有位运算符的操作数都会被转换为带符号的32位整数,以二进制补码格式表示。二进制补码格式意味着一个数字的负数对应值(例如5和-5)是将该数字的所有位取反(该数字的按位非,也称为该数字的一补数)再加上1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接