C語言----操作符

算術操作符

+    -   *   /   %
  1. 除了%操作符之外,其他的幾個操作符可以作用於整數和浮點數。
  2. 對於/操作符如果兩個操作數都爲整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。
  3. % 操作符的兩個操作數必須爲整數。返回的是整除之後的餘數

移位操作符

<< //左移操作符
/*左移操作符移位規則:
左邊拋棄、右邊補0*/
>> //右移操作符
/*右移操作符移位規則:
首先右移運算分兩種:
1. 邏輯移位 左邊用0填充,右邊丟棄
2. 算術移位 左邊用原該值的符號位填充,右邊丟棄
警告⚠:  對於移位運算符,不要移動負數位,這個是標準未定義的。*/

位操作符

&   //按位與
|   //按位或
^   //按位異或 注:他們的操作數必須是整數。

賦值操作符

賦值操作符可以連續使用

=
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=

單目操作符

//邏輯反操作
-        //負值 
+        //正值 
&        //取地址
sizeof    //操作數的類型長度(以字節爲單位) 
~        //對一個數的二進制按位取反 
--       //前置、後置
++       //前置、後置
*       //間接訪問操作符 (解引用操作符)
(類型)     //強制類型轉換

關係操作符

>
>=
<
<=
!=    //用於測試“不相等”
==    //用於測試“相等”

邏輯操作符

&&    //邏輯與
||    //邏輯或

條件操作符

exp1 ? exp2 : exp3

逗號表達式

exp1, exp2, exp3, …expN
//逗號表達式,就是用逗號隔開的多個表達式。 逗號表達式,從左向右依次執行。整個表達式的結果是最 後一個表達式的結果。

下標引用、函數調用和結構成員

1.[ ] 下標引用操作符 操作數:一個數組名 + 一個索引值
2.( ) 函數調用操作符 接受一個或者多個操作數:第一個操作數是函數名,剩餘的操作數就是傳遞給函數 的參數。
3.訪問一個結構的成員 結構體.成員名 -> 結構體指針->成員名

表達式求值

表達式求值的順序一部分是由操作符的優先級和結合性決定。 同樣,有些表達式的操作數在求值的過程中可能需要轉換爲其他類型。
隱式類型轉換

C的整型算術運算總是至少以缺省整型類型的精度來進行的。爲了獲得這個精度,表達式中的字符和短整型操作數在使用之前被轉換爲普通整型,這種轉換稱爲整型提升
整型提升的意義:

表達式的整型運算要在CPU的相應運算器件內執行,CPU內整型運算器(ALU)的操作數的字節長度 一般就是int的字節長度,同時也是CPU的通用寄存器的長度。

因此,即使兩個char類型的相加,在CPU執行時實際上也要先轉換爲CPU內整型操作數的標準長 度。

通用CPU(general-purpose CPU)是難以直接實現兩個8比特字節直接相加運算(雖然機器指令 中可能有這種字節相加指令)。所以,表達式中各種長度可能小於int長度的整型值,都必須先轉 換爲int或unsigned int,然後才能送入CPU去執行運算。

如何進行整體提升呢?

整形提升是按照變量的數據類型的符號位來提升的

算術轉換

如果某個操作符的各個操作數屬於不同的類型,那麼除非其中一個操作數的轉換爲另一個操作數的類 型,否則操作就無法進行。

操作符的屬性

複雜表達式的求值有三個影響的因素。

  1. 操作符的優先級
  2. 操作符的結合性
  3. 是否控制求值順序。
    兩個相鄰的操作符先執行哪個?取決於他們的優先級。如果兩者的優先級相同,取決於他們的結合性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章