簡體   English   中英

為什么在 C++ cout<<8*7/2 中給出 28?

[英]Why in C++ cout<<8*7/2 is giving 28?

我們知道 BODMAS 規則或首先根據優先級,先進行划分。 所以7/2 = 3 ,因為我們正在划分(int)/(int) 然后乘以 8,所以3*8將是 24。

但是cout<<是給28

為什么會這樣?

我們知道 BODMAS 規則或首先根據優先級,先進行划分。

嗯,不。 據我所知(參見例如12 ),BODMAS 代表

B先括號
O階(即冪和平方根等)
DM除法乘法(從左到右
AS加減法(從左到右)

這樣8*7/2將被處理為(8*7)/2

在數學中,當你使用實數時,乘法和除法的順序並不重要。 並且(8*7)/28*(7/2)相同

在 C(或 C++)integer 算術中,但是事情_are_不同。 乘法和除法運算符具有相同的優先級並且是左結合的。 這意味着8*7/2被解釋為(8*7)/2 ,在這種情況下,它給出了與真實數學相對應的答案。 因此,雖然數學上7/2*8等於8*7/2 ,但它在 C 中會非常不同,因為它受不同的規則控制。 計算機不做實數。

所以是的,在計算機(整數)算術中,你事情的順序確實很重要。

在 C++ 中,我們沒有嚴格遵循 BODMAS, + -的優先級低於* / 但是+-具有相同的優先級。 這意味着從左到右首先出現的將首先被評估。 相似* /具有相同的優先級。

所以cout << 8*7/2; 相當於cout << 56/2; . 因為* /兩者具有相同的優先級,但*先出現,所以*先評估。

為了實現你想要的,你可以使用cout << 8*(7/2); .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM