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