C語言 運算子

2021-10-02 11:42:00 字數 4405 閱讀 6610

二、運算子的分類

三、運算子優先順序(運算順序)排序

具有一定的運算規則的符號,對資料的一種操作 2+3- 3*5= 5

運算子要操作的資料就是運算元

運算子跟運算元組合的式子就叫做表示式

不同運算子組合在一起使用的時候,對資料的先後處理順序

在同乙個優先順序的情況下,對資料處理的先後順序

賦值運算子符號:=

a=b;

原理: 將右邊的資料賦給左邊的變數(左邊必須是變數)

注意: 資料在做賦值運算的時候,要注意資料型別是一樣的

如果兩邊的資料型別不一樣,此時就會發生資料型別的轉換

優先順序 : 比逗號運算子的優先順序高

結合性 :從右到左

算數運算子符號: + - * / %(求餘/取模)

除法 /

a) 當除號兩邊都是整數的時候,結果自動取整

10/3=3

b) 當除號兩邊只要有一邊浮點型資料的時候,結果會取到準確值

10.0/3=3.333333

注意:驗證的時候,注意資料型別的轉換,結果用浮點型資料型別的變數接收

求餘 %

a)原理:% 運算子兩邊必須是整數

如果不是整數,必須做資料型別的轉換

b)用途: 用來做位數的分離

​ 123

​ 123%10 結果是3

​ 123/10%10結果是2

​ 123/100結果是1

d)優先順序:* / % 高於 + -

算數運算子的優先順序高於賦值運算子

e)結合性:從左往右

關係運算子符號: > < >= <= != ==

對於資料:只要是非0值都是真值

​ a)由關係運算子組成的式子,叫做關係表示式

​ b)關係表示式的結果只有兩種,0 或 1(邏輯結果真)

​ c)形式: 表示式1 關係運算子 表示式2

​ 假如: 2<3

​ d)注意:判斷兩個表示式是否相等,用 ==

e)如果表示式裡面有運算子的時候,注意,優先順序,先執行優先順序高的

​ f)優先順序: > < >= <= 高於 != ==

​ 從上往下,優先順序降低:

​ 算數運算子的優先順序

​ 關係運算子

​ 賦值運算子

​ g) 結合性:從左往右

​ h) 用途:用在迴圈語句,條件語句,進行判斷

按位運算子符號: &(按位與) ^(按位異或) |(按位或) ~(按位取反)

<<(按位左移) >>(按位右移)

a)說明:在做按位運算的時候,需要將資料轉換成二進位制,再進行相關的運算

資料是以補碼的形式儲存在記憶體中的:

對於正數來說,它的補碼就是它的原碼

對於負數來說,它的補碼就是它原碼除了符號位之外,其他位取反加1

注意:凡是做按位運算的時候,必須將資料轉換成二進位制來進行運算

b)按位與 : &

形式: 表示式1 & 表示式2

規則: 全1為1,有0為0

c)按位異或: ^

形式: 表示式1 ^ 表示式2

規則: 相同為0,相異為1

d)按位或 : |

形式: 表示式1 | 表示式2

規則: 全0為0,有1為1

e)按位取反: ~

規則:0變1,1變0

注意: 按位取反是單目運算子

補充:單目運算子跟雙目運算子的區別:

單目運算子:根據運算元的數目來區分

如果只有乙個運算元:單目運算子

如果有兩個運算元:雙目運算子

如果有三個運算元:三目運算子

例子:

int a=

0x34

;0000

0000

0000

0000

0000

0000

0011

0100

~a;1111

1111

1111

1111

1111

1111

1100

1011

ffffffcb

char b=

0x34

~b;

f)按位左移 <<

規則:整體左移,高位溢位,低位補零

方法:整體左移的時候,相對於乘以2,(必須符合資料的取值範圍)

例:b左移n 相對於b*2^n

g)按位右移 >>

規則:整體右移,低位溢位,高位位補零

方法:整體右移的時候,相對於除以2,(必須符合資料的取值範圍)

優先順序:~ 高於 << >> 高於 & 高於 ^ 高於 |

結合性:單目運算子:從右往左

雙目運算子:從左往右

邏輯運算子符號:&& || !

1)邏輯與:&&

形式: 表示式1 && 表示式2

原理: 兩個表示式的結果都是真值,則整體表示式的結果就是真值

注意:如果表示式1的結果是真值,則再去判斷表示式2的結果

如果表示式1的結果是假值,不會去判斷表示式2

2)邏輯或:||

形式: 表示式1 ||表示式2

原理: 兩個表示式的結果有乙個為真,則整體表示式的結果就是真值

注意: 如果表示式1的結果是真值,則不會再去判斷表示式2的結果

如果表示式1的結果是假值,則再去去判斷表示式2

3)邏輯非:!

形式:!表示式1

原理:真變假,假變真

注意:邏輯非 是單目運算子

4)優先順序: ! 高於 && 高於 ||

結合性: 單目運算子:從右往左

&& || : 從左往右

自增自減運算子符號: ++ –

原理:本身會自增1

分類:分為前置跟後置

前置:int a; ++a 在變數的前面

規則:變數先自增,後使用,

a=1, b=++a;

後置:a++ 在變數的後面

規則:變數先使用後自增

注意:只有變數才會發生自增自減,

不管是前置還是後置,變數最終都會加1

對於前置,變數先加在使用,int a, b=++a ;

對於後置,變數先使用在自增,變數只有在一條語句結束之後才會發生自增

b=a++

; a=1b=

(a++)+

(b=a)

;//b=1+1 a=2

優先順序:單目運算子

結合性:從右往左

補充:1)自增,自減,在printf函式裡面,結合性是從右往左

printf(「a = %d b = %d\n」,a++, ++a); 先計算後面的,在計算前面的

2)在前置和後置同時出現的時候,前置會影響後置,後面在出現前置和後置的時候就不會發生變化了。

前置和前置同時出現的時候,也會受影響

解釋:不同的編譯器,所造成的影響是不同的,根據編譯器而定

b=

(a++)+

(++a)

+(a++)+

(++a)

+(a++);

//1+2+2+3+3=11 實際結果是12

//a=6d=(

++c)+(

++c)

;//2+3 實際結果是6

//c=3

三目運算子符號 ?:

形式:(條件表示式)?表示式1:表示式2

原理:先判斷條件表示式,如果條件表示式為真,則整體表示式的結果就是表示式去的結果;如果條件表示式為,則整體的表示式的結果就是表示式2的結果

本質: 三目運算子

優先順序:單目運算子 高於 雙目運算子 高於 三目運算子

結合性:從左往右

復合賦值運算子:

形式: += -= /= …

原理:a+=b; a=a+b

注意:!= >= <=

運算子本身帶有賦值運算子的不是復合賦值運算子

優先順序:跟賦值運算子的優先順序一樣

結合性:從左往右

逗號運算子:

形式:(表示式1,表示式2,…表示式n);

原理:先計算表示式1,然後在計算表示式2,一直到表示式n,

最終整個表示式的結果是表示式n的結果

優先順序:最低

結合性:從左往右

運算子優先順序的高低,從上往下,優先順序依次降低

括號 : () {} . ->

單目運算子 : ~ ! ++ –

指標運算子 : * &

算數運算子: * / % + -

按位運算子: << >>

關係運算子:> < >= <= != ==

按位運算子:& ^ |

邏輯運算子:&& ||

三目運算子: ?:

(符合)賦值運算子 : = += -= %= …

逗號運算子 : ,

C語言 運算子與 運算子

我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...

C語言 運算子和 運算子

變數 代表 取變數的位址 變數 代表 指標型的變數 取址運算子 用來取得其運算元的位址。如果運算元 x 的型別為 t,則表示式 x 的型別是 t 型別指標 指向 t 的指標 取址運算子的運算元必須是在記憶體中可定址到的位址。換句話說,該運算子只能用於函式或物件 例如左值 而不可以用於位欄位,以及那些...

C語言運算子

1級優先順序左結合 圓括號 下標運算子 指向結構體成員運算子 結構體成員運算子 字尾增量運算子 字尾增量運算子 2級優先順序右結合 邏輯非運算子 按位取反運算子 字首增量運算子 字首增量運算子 負號運算子 型別 型別轉換運算子 指標運算子 位址與運算子 sizeof 長度運算子 3級優先順序左結合 ...