[英]Why in C++ cout<<8*7/2 is giving 28?
我們知道 BODMAS 規則或首先根據優先級,先進行划分。 所以7/2 = 3 ,因為我們正在划分(int)/(int) 。 然后乘以 8,所以3*8將是 24。
但是cout<<
是給28 。
為什么會這樣?
在數學中,當你使用實數時,乘法和除法的順序並不重要。 並且(8*7)/2
與8*(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.