Javascript 为什么~0是-1?

Javascript 为什么~0是-1?,javascript,math,binary,Javascript,Math,Binary,所以我当时 对每个位执行NOT运算符 所以我试着: 0 = 00000000000000000000000000000000 so ~0 should be ~0 = 11111111111111111111111111111111 但当我尝试时,它返回-1。11111111111111111111是十进制的4294967295吗?所有1s的位模式对于无符号整数或大于32位的有符号整数是4294967295。对于32位表示为2的补码的有符号整数,其-1被解释为有符号整数

所以我当时

对每个位执行NOT运算符

所以我试着:

 0 = 00000000000000000000000000000000

         so ~0 should be

~0 = 11111111111111111111111111111111

但当我尝试时,它返回
-1
11111111111111111111
是十进制的
4294967295
吗?

所有
1
s的位模式对于无符号整数或大于32位的有符号整数是
4294967295
。对于32位表示为2的补码的有符号整数,其
-1
被解释为有符号整数,而在2的补码中,只有当类型为无符号时,所有位为1的整数才是
-1
。有符号整数使用最顶端的位作为求反标志,因此将其设置为1将导致负数。请参阅。

Duplicate:@copy-它在
C
中,而不是在JavaScript中。这是适用于大多数编程语言的一个非常基本的东西。阅读左右当你将
4294967295
转换成二进制,然后将其转换回十进制时,它将变成
-1
?可能值得添加-在两个补码中,所有位的值与无符号值的值相同,但最高有效位除外。最高有效位(MSB)的值相对于无符号值中的同一位求反-例如,对于32位整数,对于两位补码,MSB的值为-2147483648,而对于无符号位,它的值为+2147483648。这取决于使用的语言和类型@Derek。如果我没有记错Javascript的行为,如果输入
4294967295
,它将被视为
数字
,并在内部表示为
双精度
,因此它不会自动转换为
-1
。但是如果你对它进行位运算,它将被转换成一个(有符号的)32位整数,然后位模式被解释为
-1
。没有把一个值“转换”成二进制的事情——二进制是所有东西在计算机中的存储方式——剩下的只是为了我们的方便。对于x86处理器来说,关于两个补码的位具有与正边相同的位值,这是不正确的,它们没有被删除,而是添加了一个。否则,如何将所有位设置为-1?