2012-06-08 195 views
0

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

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

其中,当用PHP产生执行这个数字: 1,368,038,113

现在,当我从逻辑上看这个工作,从左到右工作,这个数字甚至没有接近。使用便宜的简单计算器,它会放弃在最后两次乘以256之前计算它,因为数量太大。

怎样才能以6乘法256来计算这样一个相对较小的数字呢?

如何php实际解决这个问题的答案会很好。

p.s.我读了这个页面:http://www.homeandlearn.co.uk/php/php2p8.html这仍然没有帮助我与上述。

+1

运算符优先级是一样的正规数学:多/分有precdnence比加/减 –

+0

如果要强制加减先走,你可以在括号包裹它们: '5 * 2 + 3'与'5 *(2 + 3)'不同[ – andrewsi

+0

]如果我使用我便宜的计算器(Mac OS X中的Spotlight),我会得到同样的结果。 –

回答

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 
+0

当这样分裂时有意义。谢谢 – Novocaine

1

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

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

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

1

PHP遵循数学法则:

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

所以你的情况,将评价是这样的:

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

如果你想要做一个不同的顺序,使用方括号。

1

与往常一样,乘法优先于加法。我已经计算了方程和它的正确性,所以我没有看到你的问题是什么......?

“这个数字甚至犯规接近”正确的< ==多数民众赞成,因为它的确切:

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

你想到什么号码?你是如何计算的?

3

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

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

这也是一个很好的细分如何计算,谢谢。 – Novocaine

+0

我认为这个答案比接受的答案要好,因为它比较短,并且立刻概括了错误。 – Gerald