我尝试执行以下代码并得到奇怪的结果:
echo ~1; // gives -2
echo ~2; // gives -3
也许有一点,描述数字是正还是负?
答案 0 :(得分:6)
没有神奇或奇怪的输出,但它来自否定的定义
十进制数的按位补码是数字减1的否定
来自手册: -
将负十进制数(即:-3)转换为二进制需要3个步骤: -
1)将十进制数的正数转换为二进制数(即:3 = 0011)
2)翻转位(即:0011变为1100)
你可能想知道1101 = -3是怎么回事。 PHP使用方法“2的补码”来呈现负二进制数。如果最左边的位是1,那么二进制数是负数,你翻转这些位并加1.如果它是0那么它是正数而你不需要做任何事情。所以0010将是正数2.如果它是1101,则它是负数,你将这些位翻转为0010.加1,你得到的0011等于-3。
答案 1 :(得分:1)
运算符~
计算数字的二进制补码。
您可以找到有关这两者的补充以及如何计算它的更多信息on wikipedia。