C語言操作符詳解
對於C語言操作符,根據我所掌握的內容可以總結如下:
1.算數操作符
算數操作符就是我們最常見的“加減乘數模”:+ - * / %,需要注意的有兩點
1.兩個整數相除是整數,所以結果會自動取整,這就給我們的計算帶來了誤差,誤了避免這種誤差,我們常常將被除數轉化為浮點型資料。例如 1/2 結果就是0,這很明顯有錯誤,為了保證正確性,只需要寫成 1.0/2 即可。
2.除數不能為0
整型提升:凡是針對char,short型的數學運算,此時都會隱式轉換為 int
算數轉換:
long double
double
float
unsigned long int
long int
unsigned int
int
如果某個運算元的型別在上面這個列表中排名較低,那麼首先要轉換為另外一個運算元的型別後執行運算。
警告: 但是算術轉換要合理,要不然會有一些潛在的問題。
2.移位操作符
<< 左移操作符 左移相當於乘以2
>> 右移操作符 右移相當於除以2
左移操作符:左邊拋棄,右邊補0
右移操作符:1. 邏輯移位 左邊用0填充,右邊丟棄 2. 算術移位 左邊用原該值的符號位填充,右邊丟棄。
我們常用的是算數移位。
符號位就是最高位,代表這個十進位制數的正負:
最高位如果是0,就是正數,右移時左邊補0
最高位如果是1,就是負數,右移時左邊補1
注意:1.不移動負數位 2.移動0位是允許的但無意義
3.位操作符
& 按位與 兩個運算元都為1,結果才是1
| 按位或 兩個運算元都為0,結果才是0
^ 按位異或 兩個運算元相同,結果是0,兩個運算元不相同,結果是1
~ 按位取反 按位取相反數 0變成1,1變成0
應用:
將一個數a的第n位設定為1,就是 a|(1<<n)
將一個數a的第m位設定為0,就是 a&(~(1<<m))
4.賦值操作符
複製操作符最常見的就是“=”,賦值操作符可以連續使用,比如 a = x = y+1;//連續賦值
還有其他我們會用到的複合賦值操作符:
+= *= /= %= >>= <<= &= |= ^=
5.單目操作符
! 邏輯反操作
- 負值
+ 正值
& 取地址
sizeof 運算元的型別長度(以位元組為單位)
~ 對一個數的二進位制按位取反
-- 前置、後置--
++ 前置、後置++
* 間接訪問操作符(解引用操作符)
(型別) 強制型別轉換
需要注意的就是* 間接訪問操作,這個會在指標裡面廣泛用到。
++i,--i 在使用i之前,先使i的值加1(減一)
i++,i--在使用i之後,先使i的值加1(減一)
6.關係操作符
>
>=
<
<=
!= 用於測試“不相等”
== 用於測試“相等”
這些都比較簡單,沒啥可說的
7.邏輯操作符
&& 邏輯與 兩個條件同時滿足
|| 邏輯或 兩個條件至少滿足一個
短路求值:&&左側表示式為假時,右側表示式不會進行求值
||左側表示式為真時, 右側表示式不會進行求值
8.條件操作符
exp1 ? exp2 : exp3 C語言中唯一 一個三目運算子
if(exp1)
{exp2;}
else
{exp3;}
9.逗號表示式
exp1, exp2, exp3, …expN
逗號表示式,就是用逗號隔開的多個表示式。 逗號表示式,從左向右依次執行。整個表示式的結果是最後一個表達
式的結果。
例如:
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);
分析:a>b,為假,所以c=0,
再往右執行a=b+10 => a=12 => c=12,
再往右執行,c=a => c=12,
再往右執行,b=a+1 => b=12+1,所以c=13。