自增和自減運算子

2021-08-03 18:30:10 字數 1840 閱讀 8048

自增和自減運算子

在c語言中有許多運算子,邏輯運算,賦值運算,關係運算……,其中最難理解的莫過於自增(++)和自減(--)運算了。

自增(自減)有兩種方式,下面分別進行分析。

1、++(--)在前。++i(--i)其用法是在整個表示式運算之前先進行自增(自減)運算,然後再進行表示式運算。例如進行如下計算:

intx ,y;

x= 8;

y= ++x;

執行結果為 :x = 9 ,y = 9 。x在給y賦值之前,先進行了自增運算x =x +1 = 9 ,然後將x的值賦給y , y = x =9,所以y = 9 。

2、++(--)在後。i++(i--)其用法是在整個表示式運算結束以後再進行自增或自減運算,例如進行如下運算:

intx ,y;

x= 8;

y= ++;

執行結果為:x = 9 ,y = 8 。x先給y賦值,y = x = 8 ,然後再進行自增運算x = x + 1 = 9 。所以y = 8 , x = 9 。

下面來進行稍微複雜的運算。

intx , y , z ;

x= 8 ;

y= (++x) + (x++) + (++x);     ⅰ

z= (--x) + (x--) + (++x);     ⅱ

其執行結果為:x = 10 ,y = 30 ,z =33 。

我們逐步進行分析。首先x賦值為8,x = 8 。然後看ⅰ步:++x →x = x +1 = 9 → x++ → x = x = 9 → ++x → x = x + 1 = 9+1 = 10 。所以在計算y 之前,x 的值是 10 。y = x + x + x = 10+10+10 = 30 → x++ →x = x + 1= 11 。所以ⅰ計算結果為y = 30 ,x = 11 。

再看ⅱ步:--x → x = x -1 =11-1 =10 → x-- → x = x =10 → ++x → x= x + 1 = 11 。所以在計算z之前。x 的值是11 。z = x + x + x = 11 +11 +11 = 33 → x-- → x = x – 1 =10 。所以ⅱ的結果為 z = 33 ,x = 10 。

通過以上計算我們可以看出自增和自減的用法以及++(--)在前和在後的區別。但是以上結果均是在windows系統下編譯計算出的,在linux系統下編譯出的結果會不會也是這樣呢?對此,我們在red hat 32位linux系統下輸入相同的**(只給出部分語句,其餘均省略):

int x , y , z ;

x= 8 ;

y= (++x) + (x++) + (++x);     ⅰ

z= (--x) + (x--) + (++x);     ⅱ

通過編譯我們發現,結果為  :x = 10 ,y = 28 ,z = 31 。

其結果與windows的不同,對此,我們作如下分析:

ⅰ ++x → x = 9 → x++ → x = 9下面一步與windows系統不同,linux系統先進行了加法計算,即y = x + x = 9 + 9 =18 。→ ++x →x = 10 → y =18 + x = 18 + 10 =28 → x++ → x = 11 。所以ⅰ結果為:x = 11 ,y = 28 。

ⅱ --x→ x =10 → x-- →x = 10,同樣linux先進行加法運算z = x + x =10 +10 = 20 。→ ++x → x = 11 → z = 20 + 11 = 31 → x-- → x = 10 。所以最終結果為 :x = 10 ,z = 31 。

通過比較我們發現,自增和自減運算的通常法一般只適用於windows系統,對於linux系統,自增和自減運算在某些情況下並不遵循一般規則。不知道這種情況是系統的bug,還是其內部的演算法,這有待於繼續研究。

自增和自減運算子

c語言提供自增運算子 和自減運算子 這兩個運算子在c語言程式設計中大量使用,而且使用非常靈活,需要重點理解。首先,我們來總結這兩個運算子使用的規則 1 自增運算子 是對變數的值增加1 2 自減運算子 是對變數的值減掉1 3 參與自增運算子的變數,可以在前和在後,例如有變數 int i 可以有i 和 ...

運算子和自增自減

in 字串和數字 號會轉換成字串 除了 號 其餘運算子都會把字串轉換成數字 所以字串轉換成數字的技巧可以讓字串減乘除 var c 10 c c 0 in 可以通過該運算子檢查物件中是否含有指定屬性,有為真,無為假 var a new object a.name wukong a name 77889...

自增自減運算子

自增自減運算子 i 先使用i,然後i i 1 i 先使用i,然後i i 1 i 先i i 1然後使用i i 先i i 1 然後使用i 以下使用vc下除錯的結果,不同的編譯器可能有不同的結果。i 3 例1printf d i 結果輸出4 例2printf d i 結果輸出3 例3printf resu...