php运算符优先级

时间:2012-06-08 16:02:37

标签: php math

我无法理解php如何计算标准数学函数。在一个具体的例子中,我有这个计算:

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256 (那是正确的,没有括号)

当用php执行时产生这个数字: 1368038113

现在,当我从逻辑上看这个并从左到右完成总和时,这个数字甚至都没有接近。使用便宜的简单计算器,它会放弃尝试在256的最后两次乘法之前计算它,因为数字太大了。

如何通过6次乘法计算得到如此相对较小的数字呢?

php实际上如何解决这个问题的细分会很棒。

P.S。我通读了这个页面:http://www.homeandlearn.co.uk/php/php2p8.html但仍然没有帮助我解决上述问题。

5 个答案:

答案 0 :(得分:4)

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256

=>

225 
+ 
154 * 256 = 39,424
+ 
138 * 256 * 256 = 9,043,968
+ 
81 * 256 * 256 * 256 = 1,358,954,496

=>

225 + 39,424 + 9,043,968 + 1,358,954,496

=>

225 
+ 
39,424 
+ 
9,043,968 
+ 
1,358,954,496

=>

1,368,038,113

修改

为什么我认为你在做:

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256

=>

225 + 154 = 379
* 
256 = 97,024
+ 
138 = 97,162
* 
256 = 24,873,472
* 
256 = 6,367,608,832
+ 
81 = 6,367,608,913
* 
256 = 1,630,107,881,728
* 
256 = 417,307,617,722,368
* 
256 = 106,830,750,136,926,208

答案 1 :(得分:3)

结果是正确的。 PHP将首先执行乘法,然后再添加。它看起来像这样:

$res = 225 + (154 * 256) + (138 * 256 * 256) + (81 * 256 * 256 * 256)
$res = 225 + 39424       + 9043968           + 1358954496
$res = 1368038113

答案 2 :(得分:1)

数学运算的基本顺序是:乘法/除法然后加法/减法。

使用超级简单的计算器,它可以一次执行一个操作。所以一个简单的计算器可能会像你这个杂乱的字符串一样对待你的输入:

(((((((((225 + 154) * 256) + 138) * 256) * 256) + 81) * 256) * 256) * 256)

答案 3 :(得分:1)

PHP遵循数学规则:

BODMAS(括号,订单,分部,乘法,加,减)

所以在你的情况下它会像这样评估:

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256
225 + 39424 + 9043968 + 1358954496
1368038113

如果您想以不同的顺序执行此操作,请使用括号。

答案 4 :(得分:1)

像往常一样,乘法优先于加法。我已经计算了等式及其正确,所以我不明白你的问题是什么......?

“这个数字甚至没有接近”< ==这是正确的,因为它的确切:

225 + 154 * 256 + 138 * 256 * 256 + 81 * 256 * 256 * 256
=225 + 39424 + 9 043 968 +1 358 954 496
=1 368 038 113

您期望什么号码?你是怎么算的?