c語言的優先與結合
❶ C運算符的優先順序與結合性
1級(左結合)
() 圓括弧;[]下標運算符;->指向結構體成員運算符;. 結構體成員運算符.。
2級(右結合)
!邏輯非運算符;~按位取反運算符;++前綴增量運算符;--前綴減量運算符;+正號運算符;-負號運算符;(類型)類型轉換運算符;*指針運算符;&地址運算符;sizeof長度運算符。
3級(左結合)
*乘法運算符;/除法運算符;%取余運算符。
4級(左結合)
+加法運算符;-減法運算符。
5級(左結合)
<<左移運算符;>>右移運算符。
6級(左結合)
<、<=、>、>=關系運算符。
7級(左結合)
==等於運算符;!=不等於運算符。
8級(左結合)
&按位與運算符。
9級(左結合)
^按位異或運算符。
10級(左結合)
|按位或運算符。
11級(左結合)
&&邏輯與運算符。
12級(左結合)
||邏輯或運算符。
13級(右結合)
? :條件運算符。
14級(右結合)
=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算符。
15級(左結合)
,逗號運算符。
❷ c語言運算符優先順序與結合性
++在後面先運算再+1
++在前面先+1再運算
所以k=10-20
如果是k=x-(++y) 那就是k=10-21了
❸ 誰能概括的幫我總結一下C中運算符的種類,運算優先順序,結合性相關知識。
C語言中的運算符可以歸納為下列5類:算術運算符、關系運算符、賦值運算符、邏輯運算符和條件運算符。
1.算術運算符有+、-、*、/、%。
分別表示算術加、減、乘、除和取余運算。
這些運算符需要兩個運算對象,稱雙目運算符。除取余(%)運算符外,這些運算符的運算對象可以是整型,也可以是實型數據。取余運算的運算對象只能是整型。取余運算的結果是兩數相除後所得的余數。
″+″和″-″也可以用做單目運算符,但作為單目運算符時必須出現在運算量的左邊,運算量可為整型,也可以為實型。
C語言中還提供兩個特殊的單目運算符:++和--,這兩個運算符既可以放在運算對象之前,又可以放在運算對象之後。
在C語言中,凡是按C語言語法規則用常量、變數、函數調用以及運算符把運算數連接起來的式子都是合法的表達式。凡表達式都有一個值,即運算結果。
2.在算術表達式中,C語言提供6種關系運算符:
<,>,<=,>=,==,!=。前四種運算符(<,>,<=,>=)的優先順序相同,後兩種的優先順序也相同,並且前四種的優先順序高於後兩種。關系運算符屬於雙目運算符,其結合方向為自左至右。
用關系運算符可以將兩個表達式(包括算術表達式、關系表達式、邏輯表達式、賦值表達式和字元表達式)連接起來構成關系表達式。
關系運算的結果是1或0。在C語言中沒有邏輯值,用0代表″假″,用1代表″真″。
3.邏輯運算符
C語言提供三種邏輯運算符:&&(邏輯與)、‖(邏輯或)、!(邏輯非)。其中前兩種為雙目運算符,第三種是單目運算符。
關系運算符中的&&和‖運算符的優先順序相同,!運算符的優先順序高於前兩個。
用邏輯運算符將關系表達式或任意數據類型(除void外)的數據連接起來就構成了邏輯表達式。邏輯表達式的值是0或1。
4.賦值運算符
在C語言中,″=″稱為賦值運算符。由賦值運算符組成的表達式稱為賦值表達式。表達式的形式為:
變數=表達式
賦值符號左邊必須是一個代表某一存儲單元的的變數名,賦值號的右邊必須是C語言中合法的表達式。
賦值運算的功能是先計算右邊表達式的值,然後再把此值賦給賦值號左邊的變數,確切地說,是把數據放入以該變數為標識的存儲單元中去。
5.條件運算符
C語言中把″?:″稱作條件運算符。條件運算符要求有三個運算對象,它是C語言中唯一的一個三目運算符。由條件運算符構成的條件表達式的一般形式為:表達式1?表達式2:表達式3
當表達式1的值為非零時,取表達式2的值為此條件表達式的值;當表達式1的值為零時,取表達式3的值為此條件表達式的值。
條件運算符具有自右向左的結合性,其優先順序別比關系運算符和算術運算符都低。
❹ 關於C語言運算優先順序和結合方向的問題
-(i++)和-i++是一樣的.雖然原則上說()的優先順序比++要高.但是因為這邊是++單目運算符,所以當我們考慮關於++或--的運算順序的時候就不可以使用優先順序來衡量,而應該是看這個運算符是在變數的左邊還是在變數的右邊,如果是在變數的左邊的話,就先讓變數+1,然後參加運算,如果是在右邊就先參加運算,然後再使變數+1.
❺ c++運算符的優先結合
從上面的逗號運算符那個例子可以看出,這些運算符計算時都有一定的順序,就好象先要算乘除後算加減一樣。優先順序和結合性是運算符兩個重要的特性,結合性又稱為計算順序,它決定組成表達式的各個部分是否參與計算以及什麼時候計算。
下面是C語言中所使用的運算符的優先順序和結合性:
優先順序 運算符 結合性
(最高) () [] -> . 自左向右
! ~ ++ -- + - * & sizeof 自右向左
* / % 自左向右
+ - 自左向右
<< >> 自左向右
< <= > >= 自左向右
== != 自左向右
& 自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
= += -= *= /= %= &= ^= |= <<= >>= 自右向左
(最低) , 自左向右
❻ c語言優先順序是什麼
c語言優先順序是:每種同類型的運算符都有內部的運算符優先順序,不同類型的運算符之間也有相應的優先順序順序。一個表達式中既可以包括相同類型的運算符,也可以包括不同類型的運算符或者函數。
當多種運算符出現在同一個表達式中時,應該先按照不同類型運算符間的優先順序進行運算。
各種運算符間的優先順序如下:數值運算符、字元串運算符、關系運算符、邏輯運算符。可以用括弧改變優先順序順序,使得括弧內的運算優先於括弧外的運算。對於多重括弧,總是由內到外強製表達式的某些部分優先運行。括弧內的運算總是最優先計算。
優先順序結合性:
當一個運算對象兩側的運算符優先順序別相同時,則按運算符的結合性來確定表達式的運算順序。關於結合性的概念在其他高級語言中是沒有的,這是C語言的特點之一。在標准C語言的文檔里,對操作符的結合性並沒有做出非常清楚的解釋。
C語言也將34種運算符規定了不同的結合性。大多數運算符結合方向是「自左至右」,即:先左後右,也叫「左結合性」
例如 a-b + c,表達式中有-和+兩種運算符,且優先順序相同,按先左後右結合方向,先圍繞減號結合,執行a-b的運算,再圍繞加號結合,完成運算(a-b) + c。除了左結合性外,C 語言有三類運算符的結合方向是從右至左,也叫「右結合性」。
❼ C語言邏輯運算符的短路,優先順序和結合性誰更
運算符 是用來對某些 數 進行操作的,這就有兩個名詞,1,運算符2,操作數,
運算符的優先順序和結合性,是兩個不同的概念。
優先順序決定該運算符跟其他運算符相鄰時,先進行哪個運算符的運算。
結合性決定該運算符是對它左邊還是右邊的數進行運算!
❽ c語言中的運算符優先順序和結合性
1.a%=4-1;<==>a%=(4-1)<==>a%3=2
2.從右向左算, a=a*3 所以a=6a=a-6 所以a=0a=a*0 所以a=0a=a+0所以a=0
3.邏輯右移, 邏輯左移都存在,以下舉例(為方便使用char類型,short,int 類似):
char cc = 1;//1(00000001)
cc = cc>>1;//1(00000000)
cout<<int(cc)<<endl;
輸出為:0
cc = 3;//00000011
cc = cc>>1;//00000001,右邊1溢出
cout<<int(cc)<<endl;
輸出為:1;
cc = 128;//(10000000)
cc = cc>>1;//(11000000)負數右移時,符號位不變,所以有兩個1;
cout<<int(cc)<<endl;
輸出為:-64
unsigned char cc=128;
cc = cc>>1;//(01000000)無符號數右移時,因為不存在符號位,只有一個1;
cout<<int(cc)<<endl;
輸出為:64
位移可用於計算2的乘除法,計算速度優於*,/運算,但可讀性差,例如:
int i = 1;
i = i<<3;//等價於 i = i*2*2*2;
i = i>>1;//;//等價於 i = i/2;