C - 運算子



運算子是一個符號,它告訴編譯器執行特定的數學或邏輯函式。根據定義,運算子對運算元執行某些操作。運算子需要一個或多個運算元才能執行操作。

根據執行操作所需的運算元數量,運算元稱為一元運算子、二元運算子或三元運算子。它們分別需要一個、兩個或三個運算元。

  • 一元運算子 - ++(增量)、--(減量)、!(非)、~(補碼)、&(地址)、*(解引用)

  • 二元運算子 - 除了 ! 之外的算術運算子、邏輯運算子和關係運算符

  • 三元運算子 - ? 運算子

C 語言富含內建運算子,並提供以下型別的運算子:

  • 算術運算子
  • 關係運算符
  • 邏輯運算子
  • 位運算子
  • 賦值運算子
  • 其他運算子

在本章中,我們將深入瞭解每個運算子的工作方式。在這裡,您將獲得所有這些章節的概述。此後,我們為每個運算子提供了獨立的章節,其中包含大量示例,以展示這些運算子在C 程式設計中的工作方式。

算術運算子

我們最熟悉算術運算子。這些運算子用於對運算元執行算術運算。最常見的算術運算子是加法 (+) 、減法 (-) 、乘法 (*) 和除法 (/) 。

此外,模數 (%) 是一個重要的算術運算子,它計算除法運算的餘數。算術運算子用於構成算術表示式。這些運算子本質上是二元的,因為它們需要兩個運算元,並且它們對數字運算元進行操作,這些運算元可以是數字字面量變數或表示式。

例如,請檢視以下簡單表示式:

a + b

這裡“+”是一個算術運算子。我們將在後續章節中詳細學習 C 語言中的算術運算子。

下表顯示了 C 語言支援的所有算術運算子。假設變數A為 10,變數B為 20,則:

顯示示例

運算子 描述 示例
+ 將兩個運算元相加。 A + B = 30
- 從第一個運算元中減去第二個運算元。 A − B = -10
* 將兩個運算元相乘。 A * B = 200
/ 將分子除以分母。 B / A = 2
% 模數運算子和整數除法後的餘數。 B % A = 0
++ 自增運算子將整數值增加 1。 A++ = 11
-- 自減運算子將整數值減少 1。 A-- = 9

關係運算符

我們在學習中學數學時也熟悉關係運算符。這些運算子用於比較兩個運算元並返回布林值(真或假)。它們用於布林表示式。

最常見的關係運算符是小於 (<)、大於 (>)、小於等於 (<=)、大於等於 (>=)、等於 (==) 和不等於 (!=) 。關係運算符也是二元運算子,需要兩個數字運算元。

例如,在布林表示式中:

a > b

這裡“>”是一個關係運算符。

我們將在後續章節中詳細學習關係運算符及其用法。

顯示示例

運算子 描述 示例
== 檢查兩個運算元的值是否相等。如果相等,則條件為真。 (A == B) 為假。
!= 檢查兩個運算元的值是否相等。如果值不相等,則條件為真。 (A != B) 為真。
> 檢查左側運算元的值是否大於右側運算元的值。如果大於,則條件為真。 (A > B) 為假。
< 檢查左側運算元的值是否小於右側運算元的值。如果小於,則條件為真。 (A < B) 為真。
>= 檢查左側運算元的值是否大於或等於右側運算元的值。如果大於或等於,則條件為真。 (A >= B) 為假。
<= 檢查左側運算元的值是否小於或等於右側運算元的值。如果小於或等於,則條件為真。 (A <= B) 為真。

邏輯運算子

這些運算子用於組合兩個或多個布林表示式。我們可以透過使用這些運算子將布林表示式組合起來形成複合布林表示式。邏輯運算子的一個示例如下:

a >= 50 && b >= 50

最常見的邏輯運算子是 AND (&&) 、OR (||) 和 NOT (!) 。邏輯運算子也是二元運算子。

顯示示例

運算子 描述 示例
&& 稱為邏輯 AND 運算子。如果兩個運算元均非零,則條件為真。 (A && B) 為假。
|| 稱為邏輯 OR 運算子。如果兩個運算元中的任何一個非零,則條件為真。 (A || B) 為真。
! 稱為邏輯 NOT 運算子。它用於反轉其運算元的邏輯狀態。如果條件為真,則邏輯 NOT 運算子將使其變為假。 !(A && B) 為真。

我們將在後續章節中詳細討論 C 語言中的邏輯運算子。

位運算子

位運算子允許您操作儲存在計算機記憶體中的資料。這些運算子用於對運算元執行位級操作。

最常見的位運算子是 AND (&) 、OR (|) 、XOR (^) 、NOT (~) 、左移 (<<) 和右移 (>>) 。這裡“~”運算子是一元運算子,而大多數其他位運算子本質上是二元的。

位運算子對位進行操作並執行逐位操作。&、| 和 ^ 的真值表如下:

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

假設 A = 60 且 B = 13,以二進位制格式表示,它們將如下所示:

A = 0011 1100

B = 0000 1101

------------------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

下表列出了 C 語言支援的位運算子。假設變數 'A' 的值為 60,變數 'B' 的值為 13,則 −

顯示示例

運算子 描述 示例
& 按位與運算子:如果兩個運算元中都存在某個位,則將其複製到結果中。 (A & B) = 12,即 0000 1100
| 按位或運算子:如果兩個運算元中任意一個存在某個位,則將其複製到結果中。 (A | B) = 61,即 0011 1101
^ 按位異或運算子:如果某個位在一個運算元中存在,但在另一個運算元中不存在,則將其複製到結果中。 (A ^ B) = 49,即 0011 0001
~ 按位取反運算子:是一元運算子,作用是“翻轉”位。 (~A ) = ~(60),即 -0111101
<< 左移運算子:左運算元的值向左移動由右運算元指定的位數。 A << 2 = 240,即 1111 0000
>> 右移運算子:左運算元的值向右移動由右運算元指定的位數。 A >> 2 = 15,即 0000 1111

賦值運算子

顧名思義,賦值運算子在 C 語言中“賦值”或設定一個命名變數的值。這些運算子用於為變數賦值。“=”符號在 C 語言中定義為賦值運算子,但不要將其與數學中的用法混淆。

下表列出了 C 語言支援的賦值運算子 −

顯示示例

運算子 描述 示例
= 簡單賦值運算子:將右側運算元的值賦給左側運算元。 C = A + B 將 A + B 的值賦給 C
+= 加法賦值運算子:將右側運算元加到左側運算元上,並將結果賦給左側運算元。 C += A 等價於 C = C + A
-= 減法賦值運算子:從左側運算元中減去右側運算元,並將結果賦給左側運算元。 C -= A 等價於 C = C - A
*= 乘法賦值運算子:將右側運算元乘以左側運算元,並將結果賦給左側運算元。 C *= A 等價於 C = C * A
/= 除法賦值運算子:將左側運算元除以右側運算元,並將結果賦給左側運算元。 C /= A 等價於 C = C / A
%= 取模賦值運算子:使用兩個運算元進行取模運算,並將結果賦給左側運算元。 C %= A 等價於 C = C % A
<<= 左移賦值運算子。 C <<= 2 等價於 C = C << 2
>>= 右移賦值運算子。 C >>= 2 等價於 C = C >> 2
&= 按位與賦值運算子。 C &= 2 等價於 C = C & 2
^= 按位異或賦值運算子。 C ^= 2 等價於 C = C ^ 2
|= 按位或賦值運算子。 C |= 2 等價於 C = C | 2

因此,表示式“a = 5”將 5 賦給變數“a”,但“5 = a”在 C 語言中是無效的表示式。

“=”運算子與其他算術、關係和位運算子結合,形成了增強賦值運算子。例如,+= 運算子用作加法賦值運算子。最常見的賦值運算子是 =、+=、-=、*=、/=、%=、&=、|= 和 ^=。

其他運算子 ↦ sizeof & 三元運算子

除了上面討論的運算子之外,C 語言還支援其他一些重要的運算子,包括 **sizeof** 和 **? :**。

顯示示例

運算子 描述 示例
sizeof() 返回變數的大小。 sizeof(a),其中 a 為整數,將返回 4。
& 返回變數的地址。 &a; 返回變數的實際地址。
* 指向變數的指標。 *a;
? : 條件表示式。 如果條件為真 ? 則值為 X : 否則值為 Y

C 語言中運算子的優先順序

運算子優先順序決定了表示式中項的組合方式,並決定了表示式的求值方式。某些運算子比其他運算子具有更高的優先順序;例如,乘法運算子的優先順序高於加法運算子。

例如,x = 7 + 3 * 2; 這裡,x 被賦值為 13,而不是 20,因為運算子 * 的優先順序高於 +,所以它首先與 3*2 相乘,然後加到 7 中。

這裡,優先順序最高的運算子出現在表的最上面,優先順序最低的出現在最下面。在一個表示式中,優先順序較高的運算子將首先被求值。

顯示示例

類別 運算子 結合性
字尾 () [] -> . ++ - - 從左到右
一元 + - ! ~ ++ -- (type)* & sizeof 從右到左
乘法 * / % 從左到右
加法 + - 從左到右
移位 << >> 從左到右
關係 < <= > >= 從左到右
相等 == != 從左到右
按位與 & 從左到右
按位異或 ^ 從左到右
按位或 | 從左到右
邏輯與 && 從左到右
邏輯或 || 從左到右
條件 ?: 從右到左
賦值 = += -= *= /= %=>>= <<= &= ^= |= 從右到左
逗號 , 從左到右

C 語言中的其他運算子

除了上述運算子之外,C 語言中還有一些其他運算子,它們不屬於上述任何類別。例如,自增和自減運算子 (++ 和 --) 本質上是一元運算子,可以作為運算元的字首或字尾出現。

與記憶體位置地址一起工作的運算子,例如地址運算子 (&) 和解引用運算子 (*)。sizeof 運算子 (sizeof) 似乎是一個關鍵字,但實際上是一個運算子。

C 語言還具有型別轉換運算子 (()),它強制更改運算元的型別。在處理派生 資料型別(如 結構體聯合體)時,C 語言還使用點 (.) 和箭頭 (->) 符號作為運算子。

C99 版本的 C 語言引入了一些額外的運算子,例如 auto、decltype。

C 語言中的單個表示式可能包含多種型別的多個運算子。 C 編譯器 根據運算子的優先順序和結合性來計算其值。例如,在以下表達式中 −

a + b * c

乘法運算子優先於加法運算子。

我們將在後續章節中透過示例瞭解這些特性。

許多其他程式語言(稱為 C 家族語言,例如 C++C#JavaPerlPHP)的運算子命名法與 C 語言相似。

廣告

© . All rights reserved.