c語言操作符彙總
分類:
- 算數操作符
- 移位操作符
- 位操作符
- 賦值操作符
- 單目操作符
- 關係操作符
- 邏輯操作符
- 條件操作符
- 逗號表示式
- 下標引用、函式呼叫和結構成員
算術操作符 + - * / %
1. 除了 % 操作符之外,其他的幾個操作符可以作用於整數和浮點數。
2. 對於 / 操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。
3. % 操作符的兩個運算元必須為整數。返回的是整除之後的餘數。
移位操作符
<< 左移操作符 >> 右移操作符
左移分為邏輯左移和算數左移,這兩個左移規則相同
左移規則:二進位制數整體向左移動移位,最左邊的一位拋棄,最右邊補0。
例: 00000000 00000000 00000000 01010100
左移一位 0<---0000000 00000000 00000000 01010100<---0
右移分為邏輯右移和算數右移,這兩個右移規則不同
邏輯右移規則:二進位制數整體向右移動移位,最右邊的一位拋棄,最左邊補0。
例: 00000000 00000000 00000000 01010100
邏輯右移一位 0-->00000000 00000000 00000000 0101010-->0
算數右移規則:二進位制數整體向右移動移位,最右邊的一位拋棄,最左邊補原來的符號位。
例: 10000000 00000000 00000000 01010100
算數右移一位 1-->10000000 00000000 00000000 0101010-->0
位操作符
按位與 & 按位或 | 按位異或 ^
注:他們的運算元必須是整數
賦值操作符 =
注意可以連續賦值,但不建議使用
例: a = b = c+1; 相當於 b = c+1; c = b;
複合賦值符 += -= *= /= %= >>= <<= &= |= ^=
用法 i+=1; 就相當於i = i +1; 其他同理;
單目操作符
! 邏輯反操作
- 負值
+ 正值
& 取地址
sizeof 運算元的型別長度(以位元組為單位)
int arr[] = {'0','1','2'};
sz0 = size(arr[0]);
sz = sizeof(arr)/sizeof(arr[0]);
可以得到下標為0的元素的型別長度sz0和陣列中的元素個數sz
~ 對一個數的二進位制按位取反
取反時用的補碼
-- 前置、後置-- ++ 前置、後置++
前置++/--,先++/--,再操作
後置++/--,先操作,再++/--
例: a = i++; 後置++,先將i的值賦給a,再對i進行++
b = --i; 前置--,先對i進行--,再將--後的i賦給b
* 間接訪問操作符(解引用操作符)
例: int* p = 0; 建立了一個整形指標變數p,指標變數中存的是地址,要對p的值進行改變,就要解引用
*p = 20; 通過p的地址找到儲存塊,將20賦給p
(型別) 強制型別轉換
float a = 3.14; 只要得到整數3,就可以用強制型別轉換 b =(int)3.14,這裡b = 3;
關係操作符 > < >= <= == !=
注意:區分等於== 和 賦值操作符 =
邏輯操作符 邏輯與&& 邏輯或||
注意:區別 邏輯與&& 與按位與& ,邏輯或|| 與按位或|
特點:n = (0 && i++); 邏輯與&& 前運算元若為假,則結果為假,n = 0;後運算元不進行運算,所以i不發生變化
m = (1 || --i); 邏輯或|| 前運算元若為真,則結果為真,m = 1;後運算元不進行運算,所以i不發生變化
條件操作符 exp1 ? exp2 : exp3
就相當於 a>b ? c=a : c=b 或 c = a>b ? a : b
逗號表示式 exp1, exp2, exp3, …expN
逗號表示式,就是用逗號隔開的多個表示式。
逗號表示式,從左向右依次執行,整個表示式的結果是最後一個表示式的結果。
例:int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);
從左向右依次執行,第一個表示式無意義,第二個表示式得到a=12,第三個表示式無意義,第四個表示式得b=13
結果是最後一個表示式的結果,所以c = 13;
下標引用、函式呼叫和結構成員
1. [ ] 下標引用操作符
運算元:一個數組名 + 一個索引值
int arr[10]; 建立陣列
arr[9] = 10; 使用下標引用操作符,[ ]的兩個運算元是arr和9。
2. () 函式呼叫操作符
接受一個或者多個運算元:第一個運算元是函式名,剩餘的運算元就是傳遞給函式的引數。
3. . 和 -> 訪問一個結構的成員
. 結構體.成員名
-> 結構體指標->成員名