運算子與表示式
C語言一共34種運算子
算術運算子:+ - * / % ++ --
關係運算符:< <= == > >= !=
邏輯運算子:! && ||
位運算子:<< >> ~ | ^ &
賦值運算子:= *= /= %= = -= <<= >>= &= ^= |=
條件運算子:? :
逗號運算子:,
指標運算子: * &
求位元組數:sizeof
強制型別轉換:(型別)
分量運算子: . ->
下標運算子:[ ]
其他:()
表示式:運算子和運算量的組合式。變數和常量都是表示式。表示式都有值和型別。
賦值運算子、賦值表示式: 變數識別符號 = 表示式。將一個數據(常量或表示式)賦給一個變數。 優先順序:低_14
複合賦值運算子: += -= *= /= %= <= >= &= ^= |=
a+=3; -> a=a+3; x*=y+8 -> x=x*(y+8) ; x%=3 -> x=x%3;
①賦值運算子左邊必須是變數,不能是常量或表示式。
②賦值運算子左邊變數與右邊表示式型別不同時,自動進行賦值轉換,規則:右邊表示式自動轉換成左邊變數的型別。
例:float f;
int i=32;
f='A'+32;
則:f=97.0;
int i;
i=2.56;
則:i=2;
③賦值表示式可以巢狀
例:a=b=c=5 a=5
a=(b=5) a=5
a=5+(c=6) a=11
強制型別轉換符:在程式執行中,資料的型別改變成另一種資料型別
資料型別轉換方法:自動轉換和強制轉換
強制轉換一般形式:(型別名)(表示式) 例 :(int)x+y (只轉換x) ;(int)(x+y);(double)(3/2)
強制轉換得到所需型別的中間變數,原變數型別不變。
算術運算子、算術表示式: + - * / %
括號內表示式優先順序最高 %只能作用於整形量
-a + b * c - d
算術表示式:表示式中的運算子都是算術運算子
自增、自減運算子:前置(++/-- i 先加減1後賦值)和後置(i ++/-- 先賦值後加減1) 單目運算子(單目運算子運算優先順序較高)
i=3 ; print(""%d,-i++);//-3
++ -- 不能用於常量和表示式。5++ (a+b)++ 都是不對的
算術運算子中的型別轉換規則:先自動轉換成同一種類型
自動轉換(運算轉換、賦值轉換、輸出轉換、函式呼叫轉換)
#include <stdio.h>
void main()
{
float a,b,c ;
a=7/2; //int3 = float 3.0
b=7/2*1.0;// 3.0
c=1.0*7/2; // 3.5
printf("a=%f,b=%f,c=%f",a,b,c);//a=3.000000,b=3.000000,c=3.500000
}
位運算子(與& 或| 取反~ 異或^ 左移<< 右移>>)
位邏輯運算子 ~ & ^ |
與& 兩個都是1為1其他0 或|有一個是1就是1 兩個都是0是0 異或^ 相同0不同1 取反~就是取反
移位運算子(<< >>)雙目運算子 必須都是整形量 表示式1<</>>表示式2
(表示式1向左或向右移動表示式2 位 空出的位補0,表示式2一定是正整數)
例 a=00001011; a<<3; 則a=01011000 若a>>3 則 a=00000001
位運算之間的優先順序 ~ << >> & ^ |
逗號運算子、逗號表示式: 表示式1,表示式2,.....表示式n -> 順序計算表示式1~n的值
a=3*5,a*4;// a=15 表示式值=15*4=60
a=3*5,a*4,a+5;// a=15 表示式值=20
a=1;b=2;c=3; printf("",(a,b),b,c);//會輸出2,2,3
其他運算子:sizeof 獲取變數和資料型別所佔記憶體的大小(位元組數) sizeof 表示式/ sizeof(資料型別名或表示式)
sizeof(int) sizeov 10L L是long型
關係運算符、關係表示式: < <= == >= > != (6個)
優先級別 < <= > >= == != 高->低
邏輯運算子、邏輯表示式: ! && || 用於構造複雜表示式 (優先順序 2級 11級 12級
條件運算子、條件表示式: 三目運算子 expr1 ? expr2 : expr 3 ; 用於判斷條件,進行選擇處理。優先順序13級 very低
2>1 ? 2 : 1 ; // 2
運算子的優先順序和結合性
C語言組成的基本元素