C 運算子與表示式

2022-06-18 20:06:08 字數 4830 閱讀 1097

變數存資料,運算子處理資料,運算子與常量變數組合起來叫表示式,每個表示式都有值。

運算子有三類:單目運算(帶乙個運算元),雙目運算(帶兩個運算元),三目運算(帶三個運算元)

被賦值變數的值,就是整個表示式的值

//

a 的值為 5,整個表示式(a=5)的值也為 5

a = 5;//

連續賦值運算從右向左(右結合性)

//先賦值 c=10,再 b=c(10),最後 a=b(10)

//整個表示式的值為 10

a=b=c=10;//

+ 優先順序高於 =

//先賦值 b=2,再 c=3,最後 a=5

//整個表示式的值為 5

a=(b=2)+(c=3);

c 語言會自動將 = 右邊表示式值的資料型別自動轉換為 = 左邊的變數的資料型別,然後再賦值給 = 左邊的變數。

資料型別轉換只針對本次運算,是臨時性轉換,不改變資料說明時對該變數定義的型別。

自動轉換規則:

無符號短長度 ---> 無符號或有符號長長度:高位部分補 0(0101 ---> 0000 0101)

有符號短長度 ---> 無符號或有符號長長度:高位部分補 0 或 1,看被轉換資料的最高位(1101 ---> 1111 1101,0101 ---> 0000 0101)

強制轉換:

//

型別說明符優先順序比較高

float x = 3.5, y = 2.1

;long a = 0xffffa032;//

把 x+y 的值轉為 int,x 與 y 的型別並沒有改變

(int)(x+y);

//把 x 的值轉為 int,x 的型別並沒有改變

int b = (int)x;

算數運算子包括五種:+、-、*、/、%,其中 % 只能用於整數的運算

簡單表示式:單個常量、變數或函式

複雜表示式:運算子+括號+運算物件(常量、變數、函式。。。)

算數表示式:表示式中的運算子都是算數運算子

運算子優先順序:型別強制轉換運算子 > 算數運算子 > 賦值運算子

c 語言不對資料溢位進行檢查:當表示式的值超出了對應資料型別的取值範圍,就會丟失資料

++i:先增減後運算

i++:先運算後增減

//

先輸出 i 的值,再讓 i+1

printf("

%d", i++);

p = i++ + i++; //

相當於 p = (i++) + (i++);

p = i++ + --i; //

相當於 p = (i++) + (--i);

只能用於變數,不能用於表示式

錯誤語法:++i++、++i--、--i++、--i--、i++=5

位運算包括:與 &、或 |、按位取反 ~、按位異或 ^、左移 <>

優先順序:(~)>(<< 、>>)>(&)>(^)>(|)

0&0=0	0|0=0	0^0=0	^0=1

0&1=0 0|1=1 0^1=1 ^1=0

1&0=0 1|0=1 1^0=1 1010>>2=10

1&1=1 1|1=1 1^1=0 1010<<2=101000

//

最後乙個表示式的值就是整個逗號表示式的值

//b 的值為 9,表示式 (a=4, b=a+5, b++) 的值為 9

a=4, b=a+5, b++;

//a 的值為 3,表示式 (x=a=3, 6*a) 的值為 18

x=a=3, 6*a;

//

檢視 int 所佔記憶體大小(位元組)

printf("

%d",sizeof(int

));//

復合賦值運算子,與 = 為同一優先順序

//exp1 op= exp2; 等價於 exp1 = exp1 op exp2;

x *= y + 8; //

x = x * (y+8)

x &= y = 3; //

y = 3; x = x & y;

如何看待資料的最高位

表示式中運算元符號不同時,所有運算元都自動轉換為無符號型別(某種意義上無符號數的運算優先順序高於有符號數)

浮點數都是有符號數,unsigned 和 signed 字首不能加在 float 和 double 上,不用轉化

注1:優先順序相同的運算子,運算次序由結合性決定。

注2:* 目運算子是指運算元的個數,比如單目運算子只有乙個運算元,雙目運算子有兩個運算元,而三目運算子則有三個運算元。

注3:通過使用小括號可以提公升表示式的優先順序至最高。

優先順序運算子

含義使用形式

結合性說明

1[ ]

陣列下標

陣列名[整型表示式]

左到右→

( )圓括號

(表示式)

.成員選擇(物件)

物件.成員名

->

成員選擇(指標)

物件指標->成員名

++自增運算子

變數名++

單目運算子

--自減運算子

變數名--

單目運算子2-

負號運算子

-表示式

右到左←

單目運算子

(型別)

強制型別轉換

(資料型別)表示式

單目運算子

++自增運算子

++變數名

單目運算子

--自減運算子

--變數名

單目運算子

*取值運算子

*指標表示式

單目運算子

&取位址運算子

&左值表示式

單目運算子

!邏輯非運算子

!表示式

單目運算子

~按位取反運算子

~表示式

單目運算子

sizeof

長度運算子

sizeof 表示式

或sizeof(型別)

單目運算子3/

除表示式 / 表示式

左到右→

雙目運算子*乘

表示式 * 表示式

雙目運算子

%餘數(取模)

整型表示式 % 整型表示式

雙目運算子4+

加表示式 + 表示式

左到右→

雙目運算子-減

表示式 - 表示式

雙目運算子

5<<

左移表示式 << 表示式

左到右→

雙目運算子

>>

右移表示式 >> 表示式

雙目運算子

6>

大於表示式 > 表示式

左到右→

雙目運算子

>=

大於等於

表示式 >= 表示式

雙目運算子

<

小於表示式 < 表示式

雙目運算子

<=

小於等於

表示式 <= 表示式

雙目運算子7==

等於表示式 == 表示式

左到右→

雙目運算子

!=不等於

表示式 != 表示式

雙目運算子8&

按位與整型表示式 & 整型表示式

左到右→

雙目運算子9^

按位異或

整型表示式 ^ 整型表示式

左到右→

雙目運算子10|

按位或整型表示式 | 整型表示式

左到右→

雙目運算子

11&&

邏輯與表示式 && 表示式

左到右→

雙目運算子

12||

邏輯或表示式 || 表示式

左到右→

雙目運算子

13?:

條件運算子

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

右到左←

三目運算子14=

賦值運算子

變數 = 表示式

右到左←

雙目運算子

/=除后賦值

變數 /= 表示式

雙目運算子

*=乘後賦值

變數 *= 表示式

雙目運算子

%=取模後賦值

變數 %= 表示式

雙目運算子

+=加後賦值

變數 += 表示式

雙目運算子

-=減後賦值

變數 -= 表示式

雙目運算子

<<=

左移後賦值

變數 <<= 表示式

雙目運算子

>>=

右移後賦值

變數 >>= 表示式

雙目運算子

&=按位與後賦值

變數 &= 表示式

雙目運算子

^=按位異或後賦值

變數 ^= 表示式

雙目運算子

|=按位或後賦值

變數 |= 表示式

雙目運算子15,

逗號運算子

表示式1,表示式2,表示式3,…

左到右→

C 運算子與表示式

作用 用於處理四則運算 算術運算子包括以下符號 運算子術語示例結果 正號 33 負號 3 3 加 10 515 減10 55 乘10 550 除10 52 取模 取餘 10 31 前置遞增 a 2 b a a 3 b 3 後置遞增 a 2 b a a 3 b 2 前置遞減 a 2 b a a 1 b...

C 運算子與表示式

作用 用於處理四則運算 算術運算子包括以下符號 運算子術語示例結果 正號 33 負號 3 3 加 10 515 減10 55 乘10 550 除10 52 取模 取餘 10 31 前置遞增 a 2 b a a 3 b 3 後置遞增 a 2 b a a 3 b 2 前置遞減 a 2 b a a 1 b...

運算子與表示式

學習c語言時,在我們已經學習了型別,常量與變數,接下來就是通過學習運算子與表示式對型別,常量與變數進行運算。簡單說一下概念,用來對資料進行運算的符號,就可以稱為運算子。c中運算子和資料構成的式子,就稱為表示式。表示式再在其後加乙個分號,即構成c 語言語句。先說一下運算子吧。c語言的運算子多,一般記住...