1. 程式人生 > >C語言操作符詳解

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。