计算php 7.1中两个负二进制数的总和

时间:2018-05-12 16:30:48

标签: php bitwise-operators php-7.1

我试图了解如何在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

错误在哪里?

1 个答案:

答案 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。

source from php.net