2012-06-08 202 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