1

我尝试执行以下代码并得到奇怪的结果:

echo ~1; // gives -2
echo ~2; // gives -3

也许有一点,描述数字是正数还是负数?

4

2 回答 2

6

没有神奇或奇怪的输出,但它来自否定的定义

十进制数的按位补码是数的负数减 1

它来自手册:-

将负十进制数(即:-3)转换为二进制需要 3 个步骤:-

  • 1)将十进制数的正数转换为二进制(即:3 = 0011)

  • 2)翻转位(即:0011变为1100)

  • 3)加1(即:1100 + 0001 = 1101)

您可能想知道 1101 = -3 是如何产生的。那么PHP使用“2的补码”方法来呈现负二进制数。如果最左边的位是 1,那么二进制数是负数,你翻转这些位并加 1。如果它是 0,那么它是正数,你不需要做任何事情。所以 0010 将是一个正数 2。如果是 1101,它是负数,你翻转位得到 0010。加 1,你得到 0011,等于 -3。

于 2013-07-03T10:22:51.020 回答
1

运算符~计算一个数字的二进制补码。

您可以在 wikipedia 上找到有关什么是二进制补码以及如何计算它的更多信息。

于 2013-07-03T10:20:16.133 回答