C++基礎知識篇:C++ 運算子

三啊三水發表於2020-11-28

 

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

  • 算術運算子

  • 關係運算子

  • 邏輯運算子

  • 位運算子

  • 賦值運算子

  • 雜項運算子

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

算術運算子

下表顯示了 C++ 支援的算術運算子。

假設變數 A 的值為 10,變數 B 的值為 20,則:

 

例項

請看下面的例項,瞭解 C++ 中可用的算術運算子。

複製並貼上下面的 C++ 程式到 test.cpp 檔案中,編譯並執行程式。

例項

#include <iostream>
using namespace std;

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

  c = a + b;
  cout << "Line 1 - c 的值是 " << c << endl ;
  c = a - b;
  cout << "Line 2 - c 的值是 " << c << endl ;
  c = a * b;
  cout << "Line 3 - c 的值是 " << c << endl ;
  c = a / b;
  cout << "Line 4 - c 的值是 " << c << endl ;
  c = a % b;
  cout << "Line 5 - c 的值是 " << c << endl ;

  int d = 10;   //  測試自增、自減
  c = d++;
  cout << "Line 6 - c 的值是 " << c << endl ;

  d = 10;    // 重新賦值
  c = d--;
  cout << "Line 7 - c 的值是 " << c << endl ;
  return 0;
}

當上面的程式碼被編譯和執行時,它會產生以下結果:

Line 1 - c 的值是 31
Line 2 - c 的值是 11
Line 3 - c 的值是 210
Line 4 - c 的值是 2
Line 5 - c 的值是 1
Line 6 - c 的值是 10
Line 7 - c 的值是 10

關係運算子

下表顯示了 C++ 支援的關係運算子。

假設變數 A 的值為 10,變數 B 的值為 20,則:

 

例項

請看下面的例項,瞭解 C++ 中可用的關係運算子。

複製並黏貼下面的 C++ 程式到 test.cpp 檔案中,編譯並執行程式。

例項

#include <iostream>
using namespace std;

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

  if( a == b )
  {
     cout << "Line 1 - a 等於 b" << endl ;
  }
  else
  {
     cout << "Line 1 - a 不等於 b" << endl ;
  }
  if ( a < b )
  {
     cout << "Line 2 - a 小於 b" << endl ;
  }
  else
  {
     cout << "Line 2 - a 不小於 b" << endl ;
  }
  if ( a > b )
  {
     cout << "Line 3 - a 大於 b" << endl ;
  }
  else
  {
     cout << "Line 3 - a 不大於 b" << endl ;
  }
  /* 改變 a 和 b 的值 */
  a = 5;
  b = 20;
  if ( a <= b )
  {
     cout << "Line 4 - a 小於或等於 b" << endl ;
  }
  if ( b >= a )
  {
     cout << "Line 5 - b 大於或等於 a" << endl ;
  }
  return 0;
}

當上面的程式碼被編譯和執行時,它會產生以下結果:

Line 1 - a 不等於 b
Line 2 - a 不小於 b
Line 3 - a 大於 b
Line 4 - a 小於或等於 b
Line 5 - b 大於或等於 a

邏輯運算子

下表顯示了 C++ 支援的關係邏輯運算子。

假設變數 A 的值為 1,變數 B 的值為 0,則:

 

例項

請看下面的例項,瞭解 C++ 中可用的邏輯運算子。

複製並黏貼下面的 C++ 程式到 test.cpp 檔案中,編譯並執行程式。

例項

#include <iostream>
using namespace std;

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

  if ( a && b )
  {
     cout << "Line 1 - 條件為真"<< endl ;
  }
  if ( a || b )
  {
     cout << "Line 2 - 條件為真"<< endl ;
  }
  /* 改變 a 和 b 的值 */
  a = 0;
  b = 10;
  if ( a && b )
  {
     cout << "Line 3 - 條件為真"<< endl ;
  }
  else
  {
     cout << "Line 4 - 條件不為真"<< endl ;
  }
  if ( !(a && b) )
  {
     cout << "Line 5 - 條件為真"<< endl ;
  }
  return 0;
}

當上面的程式碼被編譯和執行時,它會產生以下結果:

Line 1 - 條件為真
Line 2 - 條件為真
Line 4 - 條件不為真
Line 5 - 條件為真

 

 

位運算子

位運算子作用於位,並逐位執行操作。&、 | 和 ^ 的真值表如下所示:

 

假設如果 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,則:

 

例項

請看下面的例項,瞭解 C++ 中可用的位運算子。

複製並黏貼下面的 C++ 程式到 test.cpp 檔案中,編譯並執行程式。

例項

#include <iostream>
using namespace std;

int 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 - c 的值是 " << c << endl ;

  c = a | b;             // 61 = 0011 1101
  cout << "Line 2 - c 的值是 " << c << endl ;

  c = a ^ b;             // 49 = 0011 0001
  cout << "Line 3 - c 的值是 " << c << endl ;

  c = ~a;                // -61 = 1100 0011
  cout << "Line 4 - c 的值是 " << c << endl ;

  c = a << 2;            // 240 = 1111 0000
  cout << "Line 5 - c 的值是 " << c << endl ;

  c = a >> 2;            // 15 = 0000 1111
  cout << "Line 6 - c 的值是 " << c << endl ;

  return 0;
}

當上面的程式碼被編譯和執行時,它會產生以下結果:

Line 1 - c 的值是 12
Line 2 - c 的值是 61
Line 3 - c 的值是 49
Line 4 - c 的值是 -61
Line 5 - c 的值是 240
Line 6 - c 的值是 15

賦值運算子

下表列出了 C++ 支援的賦值運算子:

 

例項

請看下面的例項,瞭解 C++ 中可用的賦值運算子。

複製並黏貼下面的 C++ 程式到 test.cpp 檔案中,編譯並執行程式。

例項

#include <iostream>
using namespace std;

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

  c =  a;
  cout << "Line 1 - =  運算子例項,c 的值 = : " <<c<< endl ;

  c +=  a;
  cout << "Line 2 - += 運算子例項,c 的值 = : " <<c<< endl ;

  c -=  a;
  cout << "Line 3 - -= 運算子例項,c 的值 = : " <<c<< endl ;

  c *=  a;
  cout << "Line 4 - *= 運算子例項,c 的值 = : " <<c<< endl ;

  c /=  a;
  cout << "Line 5 - /= 運算子例項,c 的值 = : " <<c<< endl ;

  c  = 200;
  c %=  a;
  cout << "Line 6 - %= 運算子例項,c 的值 = : " <<c<< endl ;

  c <<=  2;
  cout << "Line 7 - <<= 運算子例項,c 的值 = : " <<c<< endl ;

  c >>=  2;
  cout << "Line 8 - >>= 運算子例項,c 的值 = : " <<c<< endl ;

  c &=  2;
  cout << "Line 9 - &= 運算子例項,c 的值 = : " <<c<< endl ;

  c ^=  2;
  cout << "Line 10 - ^= 運算子例項,c 的值 = : " <<c<< endl ;

  c |=  2;
  cout << "Line 11 - |= 運算子例項,c 的值 = : " <<c<< endl ;

  return 0;
}

當上面的程式碼被編譯和執行時,它會產生以下結果:

Line 1 - =  運算子例項,c 的值 = 21
Line 2 - += 運算子例項,c 的值 = 42
Line 3 - -= 運算子例項,c 的值 = 21
Line 4 - *= 運算子例項,c 的值 = 441
Line 5 - /= 運算子例項,c 的值 = 21
Line 6 - %= 運算子例項,c 的值 = 11
Line 7 - <<= 運算子例項,c 的值 = 44
Line 8 - >>= 運算子例項,c 的值 = 11
Line 9 - &= 運算子例項,c 的值 = 2
Line 10 - ^= 運算子例項,c 的值 = 0
Line 11 - |= 運算子例項,c 的值 = 2

雜項運算子

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

 

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

運算子的優先順序確定表示式中項的組合。這會影響到一個表示式如何計算。某些運算子比其他運算子有更高的優先順序,例如,乘除運算子具有比加減運算子更高的優先順序。

例如 x = 7 + 3 * 2,在這裡,x 被賦值為 13,而不是 20,因為運算子 * 具有比 + 更高的優先順序,所以首先計算乘法 3*2,然後再加上 7。

下表將按運算子優先順序從高到低列出各個運算子,具有較高優先順序的運算子出現在表格的上面,具有較低優先順序的運算子出現在表格的下面。在表示式中,較高優先順序的運算子會優先被計算。

 

例項

請看下面的例項,瞭解 C++ 中運算子的優先順序。

複製並黏貼下面的 C++ 程式到 test.cpp 檔案中,編譯並執行程式。

對比有括號和沒有括號時的區別,這將產生不同的結果。因為 ()、 /、 * 和 + 有不同的優先順序,高優先順序的操作符將優先計算。

例項

#include <iostream>
using namespace std;

int main()
{
  int a = 20;
  int b = 10;
  int c = 15;
  int d = 5;
  int e;

  e = (a + b) * c / d;      // ( 30 * 15 ) / 5
  cout << "(a + b) * c / d 的值是 " << e << endl ;

  e = ((a + b) * c) / d;    // (30 * 15 ) / 5
  cout << "((a + b) * c) / d 的值是 " << e << endl ;

  e = (a + b) * (c / d);   // (30) * (15/5)
  cout << "(a + b) * (c / d) 的值是 " << e << endl ;

  e = a + (b * c) / d;     //  20 + (150/5)
  cout << "a + (b * c) / d 的值是 " << e << endl ;
 
  return 0;
}

當上面的程式碼被編譯和執行時,它會產生以下結果:

(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50

相關文章