为什么〜0是-1?
因此,我是reading about ~
,为什么〜0是-1?
对每一位执行NOT运算符。
所以,我想:
0 = 00000000000000000000000000000000
so ~0 should be
~0 = 11111111111111111111111111111111
但是,当我尝试,它返回-1
。是不是11111111111111111111111111111111
是十进制的4294967295
?
它被解释为一个有符号的整数,并且在二进制补码中,所有位1的整数是-1
。
所以,当你把'4294967295'变成二进制,然后把它变回十进制,它将变成' -1'? –
可能值得加 - 二进制补码中,除最重要外,所有位都具有与无符号值相同的值。最高有效位(MSB)的值相对于无符号值中的同一位而言是否定的 - 例如,对于32位整数,MSB的值为-2147483648,而不是+2147483648的无符号值。 – Steve314
这取决于使用的语言和类型,@Derek。如果我记得Javascript的行为是正确的,那么如果你输入'4294967295',它将被视为'number'并且在内部被表示为'double',所以它不会被自动转换为'-1'。但是如果你对它进行位操作,它将被转换成(带符号)32位整数,然后位模式被解释为'-1'。 –
所有1
s的位模式是用于4294967295
无符号整数,或具有多于32位一个符号整数。对于带有的32位有符号整数表示为二进制补码其-1
。
Duplicate:http://stackoverflow.com/questions/3141163/why-do-unsigned-int-x-1-and-int-y-0-have-the-same-binary-representation – copy
@copy - 它在'C'不是JavaScript。 –
这是一个非常基本的东西,适用于大多数编程语言。阅读http://en.wikipedia.org/wiki/Two%27s_complement或http://stackoverflow.com/a/3141181/1078067 – copy