我试图了解如何在PHP 7.1中添加两个负数。所以,我在stackeoverflow中阅读了这些问题:
我测试了这个脚本:
<?php
echo (~5) + (~7); // output: -14
但我不明白为什么结果是-14。为了手动解决,我确实喜欢这个:
~5 => (1011)
~7 => (1001)
(1011) + (1001) = 0100 => 8 != -14 the output of php script
错误在哪里?
答案 0 :(得分:0)
在php.net中阅读了几个例子后,我非常喜欢这个例子:
NOT或补码运算符(〜)和负二进制数可能会令人困惑。
~2 = -3因为你使用公式~x = -x - 1按位 十进制数的补码是数字减1的否定。
注意:这里仅使用4位用于下面的示例,但实际上是PHP 使用32位。
将负十进制数(即:-3)转换为二进制数需要3 步骤:1)将十进制数的正数转换为 二进制(即:3 = 0011)2)翻转位(即:0011变为1100)3)加 1(即:1100 + 0001 = 1101)
你可能想知道1101 = -3是怎么回事。 PHP使用该方法 “2的补码”来呈现负二进制数。如果最左边 bit是1然后二进制数是负数,你翻转位 并添加1.如果为0则为正,您不必这样做 任何东西。因此,0010将是积极的2.如果是1101,则为负 然后翻转位以获得0010.添加1并获得等于的0011 -3。