簡體   English   中英

遞增和遞減運算符工作邏輯

[英]Increment and Decrement Operators Work Logic

我知道如果將運算符放在操作數之前,稱為前置遞增運算符和前置遞減運算符,則首先應用運算符,返回值是表達式的新值。

或者,如果運算符放在操作數之后,稱為后自增運算符和后減運算符,則返回表達式的原始值,在返回值后應用運算符。

但我不明白下面的代碼 output。

//CODE FRAGMENT A

int value1 = 3;
int value2 = ++value1 * 5 / value1-- + --value1;
//  value2 =  4 * 5 / value1-- + --value1;
//  value2 =  4 * 5 / 4 + --value1;
//  value2 =  4 * 5 / 4 + 2;
//  value2 =  20 / 4 + 2;
//  value2 =  5 + 2;
//  value2 = 7;

// CODE FRAGMENT B

int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
// var1 = 10  + 11   +  11    -  10    +  10;
// var1 = 32

// CODE FRAGMENT C

int var2 = 5;
var2 += var2 + var2 + ++var2; 
// var2 = var2 + var2 + var2 + ++var2;
// var2 =  5   +  5   +  5   +   6;
// var2 = 10 + 5 + 6;
// var2 = 15 + 6;
// var2 = 21;

我知道最高優先級運算符后一元運算符和前一元運算符,但我不了解“代碼片段 B 和代碼片段 C”的情況。 為什么這種情況不評價如下?

// CODE FRAGMENT B
int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
// var1 = 10  + var1 +  11    -  10     +  10
// var1 = 10  +  10  +  11    -  10     +  10
// var1 = 20  + 11 - 10 + 10
// var1 = 31 -10 + 10
// var1 = 21 + 10
// var1 = 31

// CODE FRAGMENT C
int var2 = 5;
var2 += var2 + var2 + ++var2; 
// var2 = var2 + var2 + var2 + ++var2;
// var2 = var2 + var2 + var2 +  6;
// var2 =  6   +  6   +  6   +  6;
// var2 = 12 + 6 + 6;
// var2 = 18 + 6;
// var2 = 24;

這是代碼片段 B 的邏輯,括號中顯示了var1的更新值。

int var1 = 10;
var1 = var1++ + var1 + var1-- - var1-- + ++var1;
       var1++ = 10  (var1 = 11)
var1 =   10   + var1 + var1-- - var1-- + ++var1;
                var1 = 11  (var1 = 11)
var1 =   10   +  11  + var1-- - var1-- + ++var1;
var1 =       21      + var1-- - var1-- + ++var1;
                       var1-- = 11  (var1 = 10)
var1 =       21      +   11   - var1-- + ++var1;
var1 =             32         - var1-- + ++var1;
                                var1-- = 10  (var1 = 9)
var1 =             32         -   10   + ++var1;
var1 =                 22              + ++var1;
                                         ++var1 = 10  (var1 = 10)
var1 =                 22              +   10  ;
var1 =                    32                   ;
32  (var1 = 32);

暫無
暫無

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

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