在 PHP 中,如果我运行以下简单程序
$number = 9;
var_dump( ~ $number );
我的输出是
int(-10)
这让我很困惑。我thought ~
是按位NOT
操作员。所以我期待类似的事情。
if binary 9 is 00000000000000000000000000001001
then Bitwise NOT 9 11111111111111111111111111110110
Meaning ~9
应该以一些可笑的大整数的形式出现,例如4,294,967,286
.
我在这里错过了哪些微妙的优先级、类型强制或其他内容?
您的输出默认为有符号 int - 将其包装在 decbin 中以获得二进制表示形式。
考虑:
$number = 9;
var_dump( bindec(decbin(~ $number)) );
With 二进制补码 http://en.wikipedia.org/wiki/Two%27s_complement, the MSB http://en.wikipedia.org/wiki/Most_significant_bit有符号二进制数的 1 位变为 0-MSB,但其他所有位都保留其各自的正值。
因此,为了论证(8 位示例),
Binary 9: 0000 1001
Inverse: 1111 0110
这导致(-128) + 64 + 32 + 16 + 4 + 2 = -10
,所以 PHP 计算正确,它只是对 MSB 应用二进制补码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)