分類:
按照功能劃分:算術運算子,關係運算子,邏輯運算子,按位運算子
按照參與運算的運算元個數:單目運算,雙目運算,三目運算
運算子的優先順序:
15級,1級最高,15級最低
運算子的結合性
優先順序必須相同,左結合右結合
算術運算子
左結合
* / %第**
+ —第四級
例子:int a = 10;int b = 10;
a*b/3-5*6+10————->(等級不同)按等級劃括號(a*b/3)-(5*6)+10————>(第三等級)等級相同從左向右((a*b/3)
從左向右運算的結果為33,5*6的結果為30)———->(第四等級,從左向右)33-30+10=13
%的使用注意事項:
1)m和n都不能為小數
2)m<0時,結果為負數
3)n<0時,對結果無影響,結果的正負性取決於m,而不是n
算術運算子的型別轉換型別
分為隱式型別轉換(自動轉換)和顯示型別轉換(強制轉換)
隱式型別轉換:
int a = 10;
float b = 10.01;
當執行a+b的操作時,a會自動轉換為float型別進行運算
顯示型別轉換
(要轉換的型別)要轉換的變數或者表示式。
(int)(a+b);
轉換的規則:(char|short)—–>int——->float———>unsigned———>long———->double
注意事項:
1)用乙個大數+乙個特別小的數,如果使用float會有問題,因為float的有效數字只有7位
int num = 1000;
float f3 = 0.00006
2)強制型別轉換時臨時轉換
(int)f;這裡的f只是臨時轉換,並沒有真正轉換他的值
表示式:用運算子按照一定的規則,連線起來的式子
分為算術表示式,關係表示式,邏輯表示式。表示式一定有返回值,表示式後面加上分號,表示乙個表示式語句;
賦值運算子:
就乙個」=」號。14級,把等號右邊的值給等號左側的變數,等號左側必須是乙個變數
a+b=5;//這種寫法是錯誤的
賦值運算子的結合性:右結合
int a,b,c;
a = b = c = 10;————–>a = (b = (c = 10));
復合賦值運算子:
14級
+=,-=,*=,/=,%=
a+=3;——–>a = a+3;
自增自減運算子:
2級 右結合,單目
1)字首表示式
++x,–x:先完成變數的自增自減操作,再用x的值作為表示式的值,即先變後用
int a = 3,b = 0;
b = a++;
printf(「%d,%d」,a,b);結果是4,4;
2)字尾表示式
x++,x–:先用後變
int a = 3,b = 0;
b = a++;
printf(「%d,%d」,a,b);結果是4,3;
注意事項
++5;//錯誤的寫法,不能是常量
++(a+3);//錯誤的寫法
result = a+++b++;
sizeof運算子
單目,作用:以位元組的形式給出了其運算元占用的儲存的大小
用法:sizeof(常量/變數/結構體名稱);
1)計算常量在記憶體中占用的位元組數
sizeof(1);//4位元組,預設int型別
sizeof(2.3f);//4位元組
sizeof(2.3);//8位元組,預設double型別
sizeof(『a』);//4個位元組,char型別的常量佔4個位元組,儲存的時候會轉換為ascii碼儲存
2)sizeof運算子計算變數在記憶體中占用的位元組數
int a = 10;
float f1 = 2.3f;
double d1 = 2.4;
char ch = 『a』;
sizeof(a);//4
sizeof(f1);//4
sizeof(d1);//8
sizeof(ch);//1
3)sizeif用於計算一種資料型別在記憶體中占用的位元組數
sizeof(int);//4
sizeof(float);//4
sizeof(double);//8
sizeof(char);//1
逗號運算子
//用於計算
result = (a+b,a-b,a*b);
result = ((a+b,a-b,a*b),a++,a–);
//簡化**
a++,b–;
//定義變數的時候,就不是使用的逗號表示式
int a = 10,b = 11,c = 11;
關係運算子
0為假,非零即真,左結合
,=,<=這四個是六級==,!=是七級
邏輯運算子
&&,||,!
!在2級
&&在11級
||在12級
左結合
邏輯運算的短路問題,邏輯或短路,邏輯與短路
三目運算子(條件運算子)
表示式1?表示式2:表示式3————–>如果表示式的值為真,那麼真個表示式的值就是表示式2的值,如果為假,
就是表示式3的值
例子:result = b>a?10:100;
注意:?和:必須同時出現,結合性為自右向左
C 學習筆記之運算子過載
operator 運算子 例1 複數的 運算 檔案1 complex1.h 複數類的定義 ifndef complex1 h define complex1 h class complex endif 檔案2 complex1.cpp 複數類的成員函式定義 include include compl...
C 學習筆記之運算子過載
首先要明白為什麼要過載運算子,其意義何在 1 我們知道c 的基本資料型別,比如int,都支援 操作,但是對於我們自定義的型別 類 的物件,並不支援這些運算子操作,過載運算子就是為了讓我們自定義的型別的物件間也支援這些運算子操作。2 c 不允許程式設計師自定義新的運算子,所以只能對已有的運算子進行過載...
OC中運算子 帶來的問題
問題描述 看下面 猜測一下執行結果?nsinteger m1 100 nsinteger m2 100 nsuinteger n 2 nslog m1 n ld m1 n nslog m2 n ld m2 n 問題分析 這個問題看似很簡單,但是卻存在乙個坑,稍不注意就會掉進去。上面 的輸出結果為 m...