0

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

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

用 php 执行时会产生这个数字:1,368,038,113

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

用 6 次乘以 256 的计算怎么可能得到这么小的数字呢?

对 php 实际如何得出这个答案的分解会很棒。

ps 我通读了这个页面:http ://www.homeandlearn.co.uk/php/php2p8.html上面的内容仍然没有帮助我。

4

5 回答 5

5
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
于 2012-06-08T16:10:27.187 回答
5

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

$res = 225 + (154 * 256) + (138 * 256 * 256) + (81 * 256 * 256 * 256)
$res = 225 + 39424       + 9043968           + 1358954496
$res = 1368038113
于 2012-06-08T16:13:02.607 回答
1

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

使用一个超级简单的计算器,它一次只做一个运算。因此,一个简单的计算器可能会将您的输入视为这个凌乱的字符串:

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

于 2012-06-08T16:08:52.577 回答
1

PHP 遵循数学规则:

BODMAS(括号、命令、除法、乘法、加法、减法)

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

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

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

于 2012-06-08T16:10:44.150 回答
1

像往常一样,乘法优先于加法。我已经计算了方程并且它是正确的,所以我不明白你的问题是什么......?

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

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

你期望的数字是多少?你是怎么数的?

于 2012-06-08T16:11:33.230 回答