C語言中-a++和-++a運(yùn)算順序?qū)嵗馕?/h1>
更新時(shí)間:2022年11月08日 11:42:04 作者:懶笑翻
C語言中的a++和++a的區(qū)別在于混合表達(dá)式中運(yùn)算符的處理順序,下面這篇文章主要給大家介紹了關(guān)于C語言中-a++和-++a運(yùn)算順序的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
前言
-a++ ,如果a=3,那么-a++輸出的結(jié)果是多少? -3還是-4?
一、首先
先來了解一下算術(shù)運(yùn)算符的優(yōu)先級和結(jié)合性:
運(yùn)算符 優(yōu)先級 結(jié)合性 ++、--、+(正)、-(負(fù)) 同級 高
^
|
|
低
右結(jié)合 *、/、% 同級 左結(jié)合 +(加)、-(減) 同級 左結(jié)合
右結(jié)合*、/、%同級左結(jié)合+(加)、-(減)同級左結(jié)合
在C語言中,計(jì)算表達(dá)式的值也需要按運(yùn)算符的優(yōu)先級從高到低的順序進(jìn)行計(jì)算。
例如,表達(dá)式 a+b*c 相當(dāng)于 a+(b*c).
若操作數(shù)兩側(cè)運(yùn)算符的優(yōu)先級相同,則按結(jié)合性(結(jié)合方向)決定計(jì)算順序,
若結(jié)合方向?yàn)?ldquo;從左到右”,則操作數(shù)先與左邊的運(yùn)算符結(jié)合;
若結(jié)合方向?yàn)?ldquo;從右到左”,則操作數(shù)先與右邊的運(yùn)算符結(jié)合;
例如,表達(dá)式-a++,- 與 ++ 同級,此時(shí)按結(jié)合方向決定計(jì)算順序(右結(jié)合),相當(dāng)于 -(a++)。
二、其次
我們來運(yùn)行一下 -a++ 感受一下:

#include <stdio.h>
int main() {
int a = 3;
int b = 5;
printf("%d\n",-a++);
printf("%d\n",a);
printf("%d\n",-++b);
printf("%d\n",b);
return 0;
}
在運(yùn)行結(jié)果出來之前,我們先來猜猜輸出結(jié)果是怎樣的? -4 4 -6 6 ?如果是這樣的話大概忘記了++前置和后置了?
運(yùn)行結(jié)果:

使用的編譯軟件:CLion
~~~結(jié)果有疑惑?請看下方解惑~~~
(初學(xué)者提示:下圖中左邊箭頭所指即當(dāng)前程序運(yùn)行到這一行,運(yùn)行到當(dāng)前行時(shí)右邊會(huì)有變量當(dāng)前取值。)

圖1: 此時(shí)我們發(fā)現(xiàn) -a++ 中,a的值還是3,這是因?yàn)?a++ ,++后置,
所以在這里print 輸出結(jié)果是-3,

圖2:在這第6行運(yùn)行完后,a++生效,也就是a=a+1,這時(shí)候a=4,所以在這里第7行運(yùn)行print輸出的結(jié)果是4。

圖3:這里這個(gè)b是為了對比-a++的結(jié)果的。-++b,意思是 -(++b),++前置,那么我們先b=b+1,這時(shí)候b=6,再走-b的輸出。也就是print 輸出 -6。

圖4:這里輸出b,此時(shí)我們從第9行時(shí)b已經(jīng)++b,因此b=5+1=6,所以在這里輸出為6。
補(bǔ)充:下面講解下3-3的例題
int a = 100; 最開始時(shí)a是100。
打印 a++; 這個(gè)printf會(huì)打印a++的值,注意是a++表達(dá)式的值,看我前面的講解,a++的值就是a的值,也就是100。 別忘了這語句結(jié)束后a的值就會(huì)自增1(也就是副作用發(fā)生了)。
打印 ++a; 目前a的值為101。現(xiàn)在要打印++a表達(dá)式的值,++a的值就等于a+1,所以會(huì)打印出102。 此語句后a=101+1=102。
打印 --a; 這次要打印--a表達(dá)式的值,同自增一個(gè)道理,--a的值等于a-1,所以會(huì)打印出101。 此語句后a=102-1=101。
打印 a--; a--表達(dá)式的值就是a的值,所以打印出101。 此語句后a=101-1=100。
打印 a+1; 這表達(dá)式與自增無關(guān),只是打印a+1的值,就是101。 對a本身的值沒有影響(加法表達(dá)式?jīng)]有副作用)。
打印 a; 這時(shí)a的值當(dāng)然還是100了。
最后
綜上,-a++ ,如果a=3,那么-a++輸出的結(jié)果是-3,運(yùn)算順序還是 -(a++),只是++后置,此時(shí)a=a+1要在執(zhí)行完這一行才執(zhí)行,如果是++前置,那么也就是 -++a 的情況,那么輸出的結(jié)果就是-4。
到此這篇關(guān)于C語言中-a++和-++a運(yùn)算順序的文章就介紹到這了,更多相關(guān)C語言-a++和-++a運(yùn)算順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:
相關(guān)文章
-
C++編程中__if_exists與__if_not_exists語句的用法
這篇文章主要介紹了C++編程中__if_exists與__if_not_exists語句的用法,是C++中用于判斷指定的標(biāo)識符是否存在的基礎(chǔ)的條件判斷語句,需要的朋友可以參考下 2016-01-01
-
C++中volatile和mutable關(guān)鍵字用法詳解
這篇文章主要介紹了C++中volatile和mutable關(guān)鍵字用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2020-02-02
-
超詳細(xì)解析C++實(shí)現(xiàn)歸并排序算法
歸并排序是比較穩(wěn)定的排序方法。它的基本思想是把待排序的元素分解成兩個(gè)規(guī)模大致相等的子序列。本文將用C++實(shí)現(xiàn)這一排序算法,需要的可以參考一下 2022-09-09
最新評論
前言
-a++ ,如果a=3,那么-a++輸出的結(jié)果是多少? -3還是-4?
一、首先
先來了解一下算術(shù)運(yùn)算符的優(yōu)先級和結(jié)合性:
運(yùn)算符 | 優(yōu)先級 | 結(jié)合性 | |
---|---|---|---|
++、--、+(正)、-(負(fù)) | 同級 | 高 ^ | | 低 | 右結(jié)合 |
*、/、% | 同級 | 左結(jié)合 | |
+(加)、-(減) | 同級 | 左結(jié)合 |
右結(jié)合*、/、%同級左結(jié)合+(加)、-(減)同級左結(jié)合
在C語言中,計(jì)算表達(dá)式的值也需要按運(yùn)算符的優(yōu)先級從高到低的順序進(jìn)行計(jì)算。
例如,表達(dá)式 a+b*c 相當(dāng)于 a+(b*c).
若操作數(shù)兩側(cè)運(yùn)算符的優(yōu)先級相同,則按結(jié)合性(結(jié)合方向)決定計(jì)算順序,
若結(jié)合方向?yàn)?ldquo;從左到右”,則操作數(shù)先與左邊的運(yùn)算符結(jié)合;
若結(jié)合方向?yàn)?ldquo;從右到左”,則操作數(shù)先與右邊的運(yùn)算符結(jié)合;
例如,表達(dá)式-a++,- 與 ++ 同級,此時(shí)按結(jié)合方向決定計(jì)算順序(右結(jié)合),相當(dāng)于 -(a++)。
二、其次
我們來運(yùn)行一下 -a++ 感受一下:
#include <stdio.h> int main() { int a = 3; int b = 5; printf("%d\n",-a++); printf("%d\n",a); printf("%d\n",-++b); printf("%d\n",b); return 0; }
在運(yùn)行結(jié)果出來之前,我們先來猜猜輸出結(jié)果是怎樣的? -4 4 -6 6 ?如果是這樣的話大概忘記了++前置和后置了?
運(yùn)行結(jié)果:
使用的編譯軟件:CLion
~~~結(jié)果有疑惑?請看下方解惑~~~
(初學(xué)者提示:下圖中左邊箭頭所指即當(dāng)前程序運(yùn)行到這一行,運(yùn)行到當(dāng)前行時(shí)右邊會(huì)有變量當(dāng)前取值。)
圖1: 此時(shí)我們發(fā)現(xiàn) -a++ 中,a的值還是3,這是因?yàn)?a++ ,++后置,
所以在這里print 輸出結(jié)果是-3,
圖2:在這第6行運(yùn)行完后,a++生效,也就是a=a+1,這時(shí)候a=4,所以在這里第7行運(yùn)行print輸出的結(jié)果是4。
圖3:這里這個(gè)b是為了對比-a++的結(jié)果的。-++b,意思是 -(++b),++前置,那么我們先b=b+1,這時(shí)候b=6,再走-b的輸出。也就是print 輸出 -6。
圖4:這里輸出b,此時(shí)我們從第9行時(shí)b已經(jīng)++b,因此b=5+1=6,所以在這里輸出為6。
補(bǔ)充:下面講解下3-3的例題
int a = 100; 最開始時(shí)a是100。
打印 a++; 這個(gè)printf會(huì)打印a++的值,注意是a++表達(dá)式的值,看我前面的講解,a++的值就是a的值,也就是100。 別忘了這語句結(jié)束后a的值就會(huì)自增1(也就是副作用發(fā)生了)。
打印 ++a; 目前a的值為101。現(xiàn)在要打印++a表達(dá)式的值,++a的值就等于a+1,所以會(huì)打印出102。 此語句后a=101+1=102。
打印 --a; 這次要打印--a表達(dá)式的值,同自增一個(gè)道理,--a的值等于a-1,所以會(huì)打印出101。 此語句后a=102-1=101。
打印 a--; a--表達(dá)式的值就是a的值,所以打印出101。 此語句后a=101-1=100。
打印 a+1; 這表達(dá)式與自增無關(guān),只是打印a+1的值,就是101。 對a本身的值沒有影響(加法表達(dá)式?jīng)]有副作用)。
打印 a; 這時(shí)a的值當(dāng)然還是100了。
最后
綜上,-a++ ,如果a=3,那么-a++輸出的結(jié)果是-3,運(yùn)算順序還是 -(a++),只是++后置,此時(shí)a=a+1要在執(zhí)行完這一行才執(zhí)行,如果是++前置,那么也就是 -++a 的情況,那么輸出的結(jié)果就是-4。
到此這篇關(guān)于C語言中-a++和-++a運(yùn)算順序的文章就介紹到這了,更多相關(guān)C語言-a++和-++a運(yùn)算順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++編程中__if_exists與__if_not_exists語句的用法
這篇文章主要介紹了C++編程中__if_exists與__if_not_exists語句的用法,是C++中用于判斷指定的標(biāo)識符是否存在的基礎(chǔ)的條件判斷語句,需要的朋友可以參考下2016-01-01C++中volatile和mutable關(guān)鍵字用法詳解
這篇文章主要介紹了C++中volatile和mutable關(guān)鍵字用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02超詳細(xì)解析C++實(shí)現(xiàn)歸并排序算法
歸并排序是比較穩(wěn)定的排序方法。它的基本思想是把待排序的元素分解成兩個(gè)規(guī)模大致相等的子序列。本文將用C++實(shí)現(xiàn)這一排序算法,需要的可以參考一下2022-09-09