運算子和結合性

2021-08-10 22:06:51 字數 2649 閱讀 9286

第一級:結合方向自左向右,

() :只用於陣列,作用:1.定義陣列,先定義後使用;2.通過陣列下標訪問陣列元素。int a=10;int arr[10];

.  : 

自定義資料型別 ,通過結構體的變數訪問內部成員;

struct student

; struct student stu1=;

stu1.age=23;

-> :結構體的指標變數,訪問它的成員使用;

int *p=&a;

struct student *ps=&stu1;

ps->age=32;

第二級:結合方向自右向左,單目運算子

!:邏輯非運算子

~:按位取反;二進位制的每一位都取反

++:自增  

int a=10;

int b=++a;//前置++;先加後賦值;a=11,b=11;

int b=a++;//後置++;先賦值後加;b=10,a=11;

--:自減

int a=10;

int b=--a;//前置--;先減後賦值;a=9,b=9;

int b=a--;//後置--;先賦值後減;a=10,b=9;

(型別):(強制)型別轉換運算子

float a=10/4.; //2->2.0

float b=10.0/4;

float c=(float)10/4;  

強制型別轉換 10->10.0

float d=float(10/4);  

10/4是2,2->2.0

*:指標  

sizeof:長度運算子 

占用的位元組數

sizeof(char)=1;

sizeof(short)=2;

sizeof(int)=4;

sizeof(long)=4;

sizeof(long long)=8;

sizeof( 1 )=4;//數字預設為整型

sizeof( 12.0 )=8;//小數預設位double型

第**:自左向右 雙目運算子

* :乘法運算子

/ :除法運算子 

整除 是整數/整數,結果為整數 10/4=2;小數點後面的都去掉,成為去尾,正負數皆可

還有一種說法叫「向0取整」,其實跟「去尾」原理是一樣的。

%:求餘運算子  

求餘就是求餘數 只能用於整數

5%3=2

(-5)%3=-2

(-5)%(-3)=-2

5%(-3)=2

有個規律,餘數的符號和被除數的符號一致,如果記不住這個規律,也可以直接算 

第四級:加(+)減(-)運算子

第五級:移位運算子,雙目,自左向右,只用於整數,不能用於浮點數

<< :左移運算子

按位左移:例如10<<1 意思就是10的二進位制按位左移一位

10->1  

0000 

1010 -> 0001 0100 

向左移動了一位,左邊的0沒有了,右邊補0;移位後變成20

10->2  

0000 

1010-> 0010 1000 

變成了40 

擴大了4倍

可以看出,按位左移了幾位,數值就會變成2的幾次方倍,所以說,擴大乙個數的2 的幾次方的倍數,最快的方法就是左移幾位。

>> :右移運算子

原理同上,縮小倍數的。

可以模擬十進位制的左右移

下面的6~12 都是雙目運算子,自左向右結合

6.關係運算子:<(小於)  

< =(小於等於)

>(大於)  

>= (大於等於)  

7.==(等於) !=(不等於)

8.按位與運算子:& 

都為1,才為1;

9.按位異或運算子:^ 

不一樣的才為1(相同為0,不同為1)

10.按位 或:| 

有乙個為1,就為1

11.邏輯與:&& 

表示式1&&表示式2 都為真,才為真 

特別注意!若表示式1為假,表示式2不會被計算

12.邏輯或: ||  

表示式1 || 表示式2 

有乙個為真,就為真,特別注意!若表示式1為真,表示式2不會被計算

13.條件運算子  

? : 

唯一的乙個三目運算子,結合性自右向左

表示式1 ?表示式2 :表示式3  

它的意思就是表示式1如果為真,則執行表示式2,否則執行表示式3 

可以替換簡單的if-else語句。

14。賦值運算子:= ,+= ,-=,*=,/= 

,%= ,>>= ,<<= ,&=,^= ,!=

自右向左 

15.逗號運算子:也叫順序求值運算子,自左向右結合

表示式1,表示式2,……,表示式n ;  

這個表示式的結果應該是表示式n

1,2,3,4,7=7;

逗號表示式:從左往右依次計算,以最後乙個表示式(表示式n)的結果為最終結果。

大致歸納優先順序的順序:

初等運算子——單目運算子——算數運算子——關係運算子——邏輯運算子——條件運算子——賦值運算子——逗號運算子

記不住的話,可以加上括號(),它的優先順序是最高的。

特別注意【】的優先順序比 * 高。

運算子結合性

在標準c語言的文件裡,對操作符的結合性並沒有做出非常清楚的解釋。乙個滿分的回答是 它是仲裁者,在幾個操作符具有相同的優先順序時決定先執行哪乙個。每個操作符擁有某一級別的優先順序,同時也擁有左結合性或右結合性。優先順序決定乙個不含括號的表示式中運算元之間的 緊密 程度。例如,在表示式a b c中,乘法...

運算子優先順序和結合性

所謂優先順序就是當乙個表示式中有多個運算子時,先計算誰,後計算誰。這個其實我們在小學學算術的時候就學過,如1 4 2。但是c語言中的運算子已經遠不止四則運算中的加減乘除了,還有其他很多運算子。當它們出現在同乙個表示式中時先計算誰後計算誰呢?所以本節還是有必要講一下的。最後我還會將所有運算子展示出來,...

運算子優先順序和結合性

優先順序 運算子含義 運算物件個數 結合順序1 初等運算子 自左至右 下標運算子 指向結構體成員運算子 結構體成員運算子2!單目運算子 1 單目運算子 自右至左 負號 指標運算子 sizeof 型別 型別轉換運算子3 乘法算數運算子 2 雙目運算子 自左至右 4 2 雙目運算子 自左至右 5 2 雙...