c語言優先順序順口溜
A. c語言優先順序
C++/C語言的運算符有數十個,運算符的優先順序與結合律如表4-1所示。注意一元運算符 + - * 的優先順序高於對應的二元運算符。
優先順序 運算符 結合律
從
高
到
低
排
列 ( ) [ ] -> . 從左至右
! ~ ++ -- (類型) sizeof
+ - * & 從右至左
* / % 從左至右
+ - 從左至右
<< >> 從左至右
< <= > >= 從左至右
== != 從左至右
& 從左至右
^ 從左至右
| 從左至右
&& 從左至右
|| 從右至左
?: 從右至左
= += -= *= /= %= &= ^=
|= <<= >>= 從左至右
表4-1 運算符的優先順序與結合律
【規則4-1-1】如果代碼行中的運算符比較多,用括弧確定表達式的操作順序,避免使用默認的優先順序。
由於將表4-1熟記是比較困難的,為了防止產生歧義並提高可讀性,應當用括弧確定表達式的操作順序。例如:
word = (high << 8) | low
if ((a | b) && (a & c))
摘自 高質量C++/C編程指南,可以看看
B. C語言運算符優先順序順序
C語言運算符優先順序順序如下所示:
(2)c語言優先順序順口溜擴展閱讀
一個表達式可以包含多個運算符。在這種情況下,運算符的優先順序決定表達式的哪部分被處理為每個運算符的操作數。例如,按照運算規則,表達式中*、/、以及 % 的優先順序比 + 和 - 高。如下列表達式:
a - b * c
相當於 a-(b*c)。如果想讓操作數以不同的方式組合在一起,則必須使用括弧:
(a - b) * c
如果一個表達式中的兩個操作數具有相同的優先順序,那麼它們的結合律(associativity)決定它們的組合方式是從左到右或是從右到左。例如,算術運算符和操作數的組合方式是從左到右,賦值運算符則是從右到左。
C. c語言中運算符有哪幾種,優先順序順序是怎樣
C語言中,運算符除了常見的三大類,算術運算符、關系運算符與邏輯運算符之外,還有一些用於完成特殊任務的運算符。
運算符的運算優先順序共分為15 級,1 級最高,15 級最低。 在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算符 優先順序相同時,則按運算符的結合性所規定的結合方向處理。
一級運算符:標識,常量,字元串文字量,優先順序提升表達式最優先執行。
二級運算符:數組下標運算(expression)、函數調用(argument-expression-list)、成員訪問(identifier、-> identifier)、後綴自增(i++)、後綴自減(i--)、復合初始化(initializer-list)。
三級運算符:前綴自增(++i)、前綴自減(--i)、單目轉型表式式(取地址& ,提領 * , 正號+ ,負號-、位反~ 邏輯否!)、求類型長度(sizeof unary-expression)。
四級運算符:強製表達式成為type-name指定的類型( type-name ) cast-expression。
五級運算符:「 * 」 乘法運算符。
六級運算符:「 + 」加法運算符。
七級運算符:<< 左移運算符;>> 右移運算符。
八級運算符:<、<=、>、>=關系運算符。
九級運算符:「 == 」等於運算符;「 != 」不等於運算符。
十級運算符:「 & 」按位與運算符。
十一級運算符:「 ∧ 」按位異或運算符。
十二級運算符:「 | 」按位或運算符。
十三級運算符:「&&」邏輯與運算符。
十四級運算符:「 || 」邏輯或運算符。
十五級運算符:? :條件運算符。
(3)c語言優先順序順口溜擴展閱讀
C語言中各運算符的結合性:
1、左結合性(自左至右):
例如算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合方向就稱為「左結合性」。
2、右結合性(自右至左)
自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算符是賦值運算符。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。
D. 怎樣記住c語言運算符優先順序有什麼秘訣
沒有口訣。
如果覺得下面記法可以,就當口訣吧。
(1)先(括弧)內層,後(括弧)外層。
解釋:有擴號時,最內層的括弧中的東西先算,再一層層向外。
(2)先函數,後運算。
解釋:式中有函數,例如sqrt(),fabs(),sin()之類,先算函數。
(3)先算術,後關系,再邏輯。
解釋:邏輯表達式中,混有算術運算,要先算算術(加減乘除,函數)運算,再算關系(大小,等不等)運算。最後算邏輯(或與非),得到真假。
(4)先乘除,後加減。
解釋:同算術一樣,先做乘除,後做加減。
邏輯運算符「與」又叫邏輯乘,邏輯運算符「或」,又叫邏輯加,按先乘除,後加減,「與」比「或」優先。
(5)先左,後右
解釋:同級運算,先做左邊的,後做右邊的。
(6)搞不清,加括弧。
解釋:自己寫算術表達式和邏輯表達式時,搞不清運算符優先順序,可以加括弧,括弧里的總是先。
E. C語言中<優先順序
c = (b+(a = a+1 > 0));
a+1 得到數值復
a+1>0 判斷這制個數值是否大於0
如果是將1賦給a否則將0賦給a
把b和那個賦給a的值加起來賦給c
你搜一個優先順序表結合著看
話說學習C語言沒必要太注意這些問題
F. C語言中運算符優先順序排序
C語言中運算符優先順序排序如下:
分為優先順序15級:
1、圓括弧【()】、下標運算符【[]】、分量運算符的指向結構體成員運算符【->】、結構體成員運算符【.】;
2、邏輯非運算符【!】、按位取反運算符【~】、自增自減運算符【++】【 --】、負號運算符【-】、類型轉換運算符【(類型)】、指針運算符和取地址運算符【*】【&】、長度運算符【sizeof】;
3、乘法運算符【*】、除法運算符【/】、取余運算符【%】;
4、加法運算符【+】、減法運算符【-】;
5、左移動運算符【<<】、右移動運算符【>>】;
6、關系運算符【< 】【>】【<=】【 >= 】;
7、等於運算符【==】、不等於運算符【!=】;
8、按位與運算符【&】;
9、按位異或運算符【^】;
10、按位或運算符【|】;
11、邏輯與運算符【&&】;
12、邏輯或運算符【||】;
13、條件運算符【?:】;
14、賦值運算符【=】【/=】【*=】【%=】【+=】【-=】【<<=】【>>=】【&=】【^=】【|=】;
15、逗號運算符【,】。
(6)c語言優先順序順口溜擴展閱讀:
運算符優先順序的記法:
C語言把除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算符處理,可見其范圍的寬(如:將賦值符「=」作為賦值運算符、方括弧作為下標運算符)。
優先順序與求值順序無關。如a+b && b*c,雖然*優先順序最高,但這個表達式求值順序是從左到右。優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。
相同優先順序中,按結合性進行結合。大多數運算符結合性是從左到右,只有三個優先順序是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。
基本的優先順序需要記住:指針最優,單目運算優於雙目運算。如正負號。先算術運算,後移位運算,最後位運算。邏輯運算最後結合。
參考資料來源:網路-運算符
G. C語言運算符的優先順序
優先順序:C語言中,運算符的運算優先順序共分為15 級。1 級最高,15 級最低。 在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算符 優先順序相同時,則按運算符的結合性所規定的結合方向處理。
結合性:C語言中各運算符的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合 方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算符是賦值運算符。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。
優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。
所有的優先順序中,只有三個優先順序是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。其它的都是從左至右結合。
具有最高優先順序的其實並不算是真正的運算符,它們算是一類特殊的操作。()是與函數相關,[]與數組相關,而->及.是取結構成員。
其次是單目運算符,所有的單目運算符具有相同的優先順序,因此在我認為的 真正的運算符中它們具有最高的優先順序,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。
另外在C語言里,沒有前置後置之分,因為++ -- 是右結合所以右側優先運算,表現為 操作數後置優先順序比較高 的假象,前置和後置的區分是因為運算符重載而後加入C++的
接下來是算術運算符,*、/、%的優先順序當然比+、-高了。
移位運算符緊隨其後。
其次的關系運算符中,< <= > >=要比 == !=高一個級別,不大好理解。
所有的邏輯操作符都具有不同的優先順序(單目運算符除外,!和~)
邏輯位操作符的與比或高,而異或則在它們之間。
跟在其後的&&比||高。
接下來的是條件運算符,賦值運算符及逗號運算符。
在C語言中,只有4個運算符規定了運算方向,它們是&&、| |、條件運算符及賦值運算符。
&&、| |都是先計算左邊表達式的值,當左邊表達式的值能確定整個表達式的值時,就不再計算右邊表達式的值。如 a = 0 && b; &&運算符的左邊位0,則右邊表達式b就不再判斷。
在條件運算符中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值。
賦值表達式則規定先對右邊的表達式求值,因此使 a = b = c = 6;成為可能。
口訣注釋
優先順序等級口訣
圓方括弧、箭頭一句號, 自增自減非反負、針強地址長度,
乘除,加減,再移位,
小等大等、等等不等,
八位與,七位異,六位或,五與,四或,三疑,二賦,一真逗。
其中「,」號為一個等級分段。
優先順序等級注釋
「圓方括弧、箭頭一句號」指的是第15級的運算符。其中圓方括弧很明顯「()、[]」,箭頭 指的是指向結構體成員運算符「->」,句號 指的是結構體成員運算符「.」 ;
「自增自減非反負、針強地址長度」指的是第14級的運算符。其中 非 指的是邏輯運算符「!」,反 指的是按位取反運算符「~」,負 指的是負號運算符「-」,針 指的是指針運算符「*」,強 指的是強制類型轉換運算符,地址 指的是地址運算符「&」,長度 指的是長度運算符「sizeof 」;
「乘除,加減,再移位」移位指的是左移運算符「<<」和右移運算符「>>」,其中除法還包括了 取余運算符「%」;
「小等大等、等等不等」 指的是第10級到第9級的運算符:<、<=、>和>=,等等指的是等於運算符==,不等指的是不等於運算符!=
「八位與,七位異,六位或」其中 八位與 指的是第8級的 按位與 運算符「&」,七位異 指的是第7級的按位異或運算符「^」,六位或 指的是第6級的按位或運算符「|」;
「五與,四或」指的是第5級、第4級的邏輯與運算符「&&」和邏輯或運算符「||」;
「三疑,二賦,一真逗」指的是第3級到第1級的運算符。其中,三疑指的是條件運算符「?:」 (三有雙重含義:即指優先順序別是三,它的運算符類型也是三目,疑也取「?」之意),二賦 指的是賦值運算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,一真逗 指的是第1級的「,」運算符,真字只是為了語句需要罷了。
由於C語言的運算符優先順序與C++的不完全一樣(主要是增加了幾個運算符),所以這個口訣不能完全實用於C++.但是應該能夠兼容,大家可以比較一下他們的區別應該就能夠很快掌握C++的優先順序的!
應用舉例
1、賦值運算符:a=5;
a=b=0;
第一個賦值語句把5賦給變數a;第二個賦值語句的意思是把0同時賦值給兩個變數。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算,先b=0,然後a=b。
2、復合賦值運算符:a=1;a+=3;
上面第二個賦值語句等價於a=a+3;即a=4。
3、算術運算符:Area=Height*Width;num=num1+num2/num3-num4;
第一個賦值語句Height和Width相乘結果賦給變數Area;第二個賦值語句先完成num2與num3的整除運算,然後與num1相加,再減去num4,結果賦給num。運算符運算順序先算乘除再算加減。單目正和單目負最先運算。
4、邏輯運算符:a=1,b=1;
a||b-1;
因為a=1為真值,所以不管b-1是不是真值,總的表達式一定為真值,這時後面的表達式就不會再計算了。
5、關系運算符:if(a>0)...
如果a>0,則執行if語句中的內容,否則退出。
6、條件運算符:a=(b>0)?b:-b;
當b>0時,a=b;當b不大於0時,a=-b;其實上面的意思就是把b的絕對值賦值給a。
7、逗號運算符:b=2,c=7,d=5;
a=(++b,c--,d+3);
有三個表達式,用逗號分開,所以最終的值應該是最後一個表達式的值,也就是d+3=8,所以a=8。
8、位邏輯運算符
包括:1。&位與符 2。|位或符 3。^位異或符 4。~位取反符以操作數12為例。位運算符將數字12視為1100。位運算符將操作數視為位而不是數值。數值可以是任意進制的:十進制、八進制或十六進制。位運算符則將操作數轉化為二進制,並相應地返回1或0。位運算符將數字視為二進制值,並按位進行相應運算,運算完成後再重新轉換為數字。例如:表達式10&15表示(1010 & 1111),它將返回表示1010的值10。因為真真得真,或者是11得1,同位全是1結果也是1表達式10|15表示(1010 | 1111),它將返回表示1111的值15。假假得假。全零得零。表達式10^15表示(1010 ^ 1111), 它將返回表示0101的值5。此時是同性相斥,相同的就為假。表達式~10表示(~1010),它將返回表示0101的值 -11。此號好理解,按位取反。
H. c語言的優先順序
三樓的,結果不是1,0;是0,0吧
這個程序不能說明優先順序的問題,因版為在c語言的printf輸出語句中,是從權右向左執行的。
自增自減高於邏輯非
main()
{
int
a=-1,b=1,c;
c=!a++&&b++;
printf("%d%d",b,c);
}
執行結果是1,0,b的值沒變,c=0,則說明是先執行a++再執行!的
這說明自增自減高於邏輯非
I. c語言運算符優先順序從高到低的順序依次為
||一共有十五個優先順序:
1
()
[]
.
->
2
!
~
-(負號)
++
--
&(取變數地址)*
(type)(強制類型)
sizeof
3
*
/
%
4
+
-
5
>>
<<
6
>
>=
<
<=
7
==
!=
8
&
9
^
10
|
11
&&
12
||
13
?:
14
=
+=
-=
*=
/=
%=
|=
^=
&=
>>=
<<=
15
,
就著多吧
結合性:2
13
14
是從右至左
其他都是
從左至右
J. C語言運算符優先順序
C語言運算符優先順序?
int m=1,n=1,a=1,b=1,c=1;(m=a>b)&&(n=a>b);
printf("%d%d",m,n);//0;1but,Why?
這是因為a>b不成立, m的值為0,而後面的是&&運算,所以不再計算,而n的值仍為1
======
m---m;_______這是不能通過編譯的。
若是int m=3;
m=--m; //m先自減,然後賦值給m,即m=2
printf("%d",m);// 2 but,Why?