C++ 運算子



運算子是告訴編譯器執行特定數學或邏輯操作的符號。C++ 擁有豐富的內建運算子,並提供以下型別的運算子:

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

本章將逐一介紹算術、關係、邏輯、位、賦值和其他運算子。

算術運算子

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

示例

以下是算術運算子的示例:

#include <iostream>
using namespace std;
 
main() {
   int a = 21;
   int b = 10;
   int c ;

   c = a + b;
   cout << "Line 1 - Value of c is :" << c << endl ;

   c = a - b;
   cout << "Line 2 - Value of c is  :" << c << endl;

   c = a * b;
   cout << "Line 3 - Value of c is :" << c << endl ;

   c = a / b;
   cout << "Line 4 - Value of c is  :" << c << endl ;

   c = a % b;
   cout << "Line 5 - Value of c is  :" << c << endl ;

   c = a++; 
   cout << "Line 6 - Value of c is :" << c << endl ;

   c = a--; 
   cout << "Line 7 - Value of c is  :" << c << endl ;

   return 0;
}

輸出

Line 1 - Value of c is :31
Line 2 - Value of c is  :11
Line 3 - Value of c is :210
Line 4 - Value of c is  :2
Line 5 - Value of c is  :1
Line 6 - Value of c is :21
Line 7 - Value of c is  :22

關係運算符

關係運算符 用於比較兩個值或表示式。這些運算子返回布林值 - 如果比較正確則為 **true**,否則為 **false**。

它們對於根據條件做出決策和控制程式流程至關重要。

C++ 語言支援以下關係運算符

假設變數 A 持有 10,變數 B 持有 20,則:

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

示例

以下是關係運算符的示例:

#include <iostream>
using namespace std;

main() {
   int a = 21;
   int b = 10;
   int c ;

   if( a == b ) {
      cout << "Line 1 - a is equal to b" << endl ;
   } else {
      cout << "Line 1 - a is not equal to b" << endl ;
   }
   
   if( a < b ) {
      cout << "Line 2 - a is less than b" << endl ;
   } else {
      cout << "Line 2 - a is not less than b" << endl ;
   }
   
   if( a > b ) {
      cout << "Line 3 - a is greater than b" << endl ;
   } else {
      cout << "Line 3 - a is not greater than b" << endl ;
   }
   
   /* Let's change the values of a and b */
   a = 5;
   b = 20;
   if( a <= b ) {
      cout << "Line 4 - a is either less than \ or equal to  b" << endl ;
   }
   
   if( b >= a ) {
      cout << "Line 5 - b is either greater than \ or equal to b" << endl ;
   }
   
   return 0;
}

輸出

Line 1 - a is not equal to b
Line 2 - a is not less than b
Line 3 - a is greater than b
Line 4 - a is either less than  or equal to  b
Line 5 - b is either greater than  or equal to b

邏輯運算子

邏輯運算子 用於對布林值(**true** 或 **false**)執行邏輯運算。這些運算子對於根據條件控制程式流程至關重要。C++ 中有三個主要的邏輯運算子,如下所示:

C++ 語言支援以下邏輯運算子。

假設變數 A 持有 1,變數 B 持有 0,則:

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

示例

以下是邏輯運算子的示例:

#include <iostream>
using namespace std;

main() {
   int a = 5;
   int b = 20;
   int c ;

   if(a && b) {
      cout << "Line 1 - Condition is true"<< endl ;
   }
   
   if(a || b) {
      cout << "Line 2 - Condition is true"<< endl ;
   }
   
   /* Let's change the values of  a and b */
   a = 0;
   b = 10;
   
   if(a && b) {
      cout << "Line 3 - Condition is true"<< endl ;
   } else {
      cout << "Line 4 - Condition is not true"<< endl ;
   }
   
   if(!(a && b)) {
      cout << "Line 5 - Condition is true"<< endl ;
   }
   
   return 0;
}

輸出

Line 1 - Condition is true
Line 2 - Condition is true
Line 4 - Condition is not true
Line 5 - Condition is true

位運算子

位運算子 用於對整數資料型別執行位級運算。這些運算對位進行直接操作,例如低階程式設計、圖形和密碼學。

位運算子在位上工作並執行逐位運算。&、| 和 ^ 的真值表如下所示:

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 ) 將得到 -61,由於帶符號二進位制數,在 2 的補碼形式中為 1100 0011。
<< 二進位制左移運算子。左側運算元的值向左移動右側運算元指定的位數。 A << 2 將得到 240,即 1111 0000
>> 二進位制右移運算子。左側運算元的值向右移動右側運算元指定的位數。 A >> 2 將得到 15,即 0000 1111

示例

以下是位運算子的示例:

#include <iostream>
using namespace std;

main() {
   unsigned int a = 60;	  // 60 = 0011 1100  
   unsigned int b = 13;	  // 13 = 0000 1101
   int c = 0;           

   c = a & b;             // 12 = 0000 1100
   cout << "Line 1 - Value of c is : " << c << endl ;

   c = a | b;             // 61 = 0011 1101
   cout << "Line 2 - Value of c is: " << c << endl ;

   c = a ^ b;             // 49 = 0011 0001
   cout << "Line 3 - Value of c is: " << c << endl ;

   c = ~a;                // -61 = 1100 0011
   cout << "Line 4 - Value of c is: " << c << endl ;

   c = a << 2;            // 240 = 1111 0000
   cout << "Line 5 - Value of c is: " << c << endl ;

   c = a >> 2;            // 15 = 0000 1111
   cout << "Line 6 - Value of c is: " << c << endl ;

   return 0;
}

輸出

Line 1 - Value of c is : 12
Line 2 - Value of c is: 61
Line 3 - Value of c is: 49
Line 4 - Value of c is: -61
Line 5 - Value of c is: 240
Line 6 - Value of c is: 15

賦值運算子

賦值運算子 用於為變數賦值。這些運算子允許您設定或更新儲存在變數中的值。

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

示例

下面是一個賦值運算子的示例:

#include <iostream>
using namespace std;

main() {
   int a = 21;
   int c ;

   c =  a;
   cout << "Line 1 - =  Operator, Value of c = : " <<c<< endl ;

   c +=  a;
   cout << "Line 2 - += Operator, Value of c = : " <<c<< endl ;

   c -=  a;
   cout << "Line 3 - -= Operator, Value of c = : " <<c<< endl ;

   c *=  a;
   cout << "Line 4 - *= Operator, Value of c = : " <<c<< endl ;

   c /=  a;
   cout << "Line 5 - /= Operator, Value of c = : " <<c<< endl ;

   c  = 200;
   c %=  a;
   cout << "Line 6 - %= Operator, Value of c = : " <<c<< endl ;

   c <<=  2;
   cout << "Line 7 - <<= Operator, Value of c = : " <<c<< endl ;

   c >>=  2;
   cout << "Line 8 - >>= Operator, Value of c = : " <<c<< endl ;

   c &=  2;
   cout << "Line 9 - &= Operator, Value of c = : " <<c<< endl ;

   c ^=  2;
   cout << "Line 10 - ^= Operator, Value of c = : " <<c<< endl ;

   c |=  2;
   cout << "Line 11 - |= Operator, Value of c = : " <<c<< endl ;

   return 0;
}

輸出

Line 1 - =  Operator, Value of c = : 21
Line 2 - += Operator, Value of c = : 42
Line 3 - -= Operator, Value of c = : 21
Line 4 - *= Operator, Value of c = : 441
Line 5 - /= Operator, Value of c = : 21
Line 6 - %= Operator, Value of c = : 11
Line 7 - <<= Operator, Value of c = : 44
Line 8 - >>= Operator, Value of c = : 11
Line 9 - &= Operator, Value of c = : 2
Line 10 - ^= Operator, Value of c = : 0
Line 11 - |= Operator, Value of c = : 2

其他運算子

雜項運算子(通常縮寫為“misc operators”)包括各種不適合歸入算術運算子或邏輯運算子等其他類別的運算子。以下是幾種常見的雜項運算子及其定義:

下表列出了 C++ 支援的其他一些運算子。

序號 運算子 & 描述
1

sizeof

sizeof 運算子 返回變數的大小。例如,sizeof(a),其中 'a' 為整數,將返回 4。

2

Condition ? X : Y

條件運算子 (?)。如果 Condition 為真,則返回 X 的值,否則返回 Y 的值。

3

,

逗號運算子 用於執行一系列操作。整個逗號表示式的值是逗號分隔列表中最後一個表示式的值。

4

.(點)和 ->(箭頭)

成員運算子 用於引用類、結構體和聯合體的各個成員。

5

強制轉換

強制轉換運算子 將一種資料型別轉換為另一種資料型別。例如,int(2.2000) 將返回 2。

6

&

指標運算子 & 返回變數的地址。例如 &a; 將給出變數的實際地址。

7

*

指標運算子 * 是指向變數的指標。例如 *var; 將指向變數 var。

條件(三元)運算子 (?:)

它是 C++ 中執行條件評估的一種簡寫方式。

int a = 10, b = 20;
int result = (a > b) ? a : b;  // result will be 20 because a is not greater than b
cout << "The greater value is: " << result << endl;

輸出

The greater value is: 20

sizeof 運算子

sizeof 運算子返回變數或資料型別的大小(以位元組為單位)。

int x = 5;
cout << "Size of int: " << sizeof(x) << " bytes" << endl;  
cout << "Size of double: " << sizeof(double) << " bytes" << endl;

輸出

4
8

按位取反運算子 (~)

按位取反運算子反轉其運算元的位。

unsigned int num = 5;  // Binary: 00000000 00000000 00000000 00000101
unsigned int result = ~num;  // Binary: 11111111 11111111 11111111 11111010
cout << "Bitwise complement of 5: " << result << endl;  // Outputs a large positive number due to unsigned

範圍解析運算子 (::)

此運算子用於定義函式或變數的範圍,尤其是在類和名稱空間的上下文中。

class MyClass {
public:
    static int value;
};

int MyClass::value = 10;  // Define static member outside the class

cout << "Static value: " << MyClass::value << endl;

輸出

10

C++ 中的運算子優先順序

運算子優先順序 決定了表示式中項的組合方式。這會影響表示式的計算方式。某些運算子的優先順序高於其他運算子;例如,乘法運算子的優先順序高於加法運算子:

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

這裡,優先順序最高的運算子出現在表格頂部,優先順序最低的出現在底部。在表示式中,優先順序較高的運算子將首先被計算。

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

示例

下面是一個演示運算子優先順序的示例:

#include <iostream>
using namespace std;
 
main() {
   int a = 20;
   int b = 10;
   int c = 15;
   int d = 5;
   int e;

   e = (a + b) * c / d;      // ( 30 * 15 ) / 5
   cout << "Value of (a + b) * c / d is :" << e << endl ;

   e = ((a + b) * c) / d;    // (30 * 15 ) / 5
   cout << "Value of ((a + b) * c) / d is  :" << e << endl ;

   e = (a + b) * (c / d);   // (30) * (15/5)
   cout << "Value of (a + b) * (c / d) is  :" << e << endl ;

   e = a + (b * c) / d;     //  20 + (150/5)
   cout << "Value of a + (b * c) / d is  :" << e << endl ;
  
   return 0;
}

輸出

Value of (a + b) * c / d is :90
Value of ((a + b) * c) / d is  :90
Value of (a + b) * (c / d) is  :90
Value of a + (b * c) / d is  :50
廣告