簡體   English   中英

C ++中的評估順序

[英]Order of Evaluation in c++

我剛開始使用C ++,所以不確定評估順序。 在下面的代碼段中,您可以看到在評估C *(line-i)/ i時更改評估C的評估順序會給我不同的結果,它給我-131213633,而當我將其評估為(line-i )/ i * C,它給我145422675。我理解在第一種情況下,這是一個溢出問題,但我想了解評估順序。

C = C * (line - i) / i ;
(gdb) p line
$1 = 31
(gdb) p i
$2 = 15
(gdb) p C
$3 = 145422675
(gdb) p C * (line - i) / i
$4 = -131213633
(gdb) p (line - i) / i * C
$5 = 145422675

*/與左側關聯,因此表達式從左到右求值。

C * (line - i) (即C * 16 )溢出。
(line - i) / i1 ,並且1 * C不會溢出。

cout<< 3/2 *2; // Prints 2
cout<< 2*3/2;  // Prints 3

在第一行中,3/2取值為1.5,它是整數1。然后將其乘以2得到2。

在第二行中,首先完成乘法運算,將2 * 3計算為6,然后除以2得到3。

因此,當將整數和雙精度算術混合在一起時,求值順序很重要。

暫無
暫無

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

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