[英]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.