---
# System prepended metadata

title: 【C++ 筆記】常數 / 運算子（上） - part 3
tags: [C++, 程式語言]

---

【C++ 筆記】常數 / 運算子（上） - part 3
===

目錄（Table of Contents）：

[TOC]

---

很感謝你點進來這篇文章。

你好，我並不是什麼 C++、程式語言的專家，所以本文若有些錯誤麻煩請各位鞭大力一點，我極需各位的指正及指導！！本系列文章的性質主要以詼諧的口吻，一派輕鬆的態度自學程式語言，如果你喜歡，麻煩留言說聲文章讚讚吧！

回顧上集內容：

C++ 常見常用資料型態：int、float、double、char，目前只要記得這些即可。

常數（Const）
---

常數就是不能變的數，被定義為常數後就是一個固定值，又稱實字（也可稱字面量：iteral）。

實字就是字面上的數值，1 就是 1，他固定不變，總之就是表示固定不變的量。

總之就把常數想像成是將一個人石化就對了！

常數定義如下：

```cpp=
#define identifier value
```

或

```cpp=
const type variable = value;
```

type -> 資料型態
vairable -> 變數
value -> 數值

以下是一個範例：

```cpp=
#include <iostream>
using namespace std;
 
int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   cout << area;
   cout << NEWLINE;
   return 0;
}
```

輸出結果：

```cpp=
50

```

程式碼範例取自：[C++ 常量 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-constants-literals.html)

程式碼說明：

通常被常數宣告的變數之名稱我們都會習慣用大寫表示，小寫就表示可變變數。

而 NEWLINE 則是以 char（字元） 進行常數變數宣告，表示儲存字元的意思。

字串是由一串字元組成的，字元就好比單一一個英文字母 abcdefg，也可是其他特殊符號 !@#$%^ 等等，而很多個字元組成再一起就形成了一個字串。

所以字串是字元的集合體。

~~所以字串就是很多字、串在一起。~~

而 NEWLINE 內容物是 '\n'，而需要注意的是，由"成對"單引號「''」組成的是字元；由"成對"雙引號「""」組成的是字串。

所以跳脫字元 \n 表示換行，也是一種字元。

跳脫字元（Escape Character）
---

跳脫字元（又可稱逸出字元、轉義字元：Escape Character），為什麼叫跳脫字元？~~因為字元想逃跑(X~~。

因為跳脫字元可以讓後面跟隨的字元「跳脫」出原本的字面意義或功能，從而賦予其不同的含義或用途。

像是 \n 表示換行，所以後面的字元是不是也跟著一起換行？

而跳脫字元主要以「\」反斜線後面跟上一個英文字母為主，表示一個特殊意義，注意喔，不是這個斜線「/」，是這個斜線：「\」。

然後讓我們介紹幾個跳脫字元：

| 跳脫字元 | 意義 |
| -------- | -------- |
| \" | 顯示雙引號 |
| \' | 顯示單引號 |
| \\ | 顯示反斜線 |
| \0 | 空字元（backslash） |
| \a | 蜂鳴器警報（alert bell） |
| \b | 退格（backspace） |
| \n | 換行（newline） |
| \t | Tab（horizontal tab -> 水平縮排） |
| \v | Tab（Vertical tab -> 垂直縮排） |

以下是一個範例：

```cpp=
#include <iostream>
using namespace std;

int main(){
    cout << "換行 : \n";
    cout << "顯示單引號 : \'" << endl;
    cout << "顯示雙引號 : \"" << endl;
    cout << "顯示反斜線 : \\" << endl;
    cout << "退格 : 退格\b退格" << endl;
    cout << "水平縮排 : \t水平縮排" << endl;
    cout << "垂直縮排 : \v垂直縮排";
    return 0;
}
```

輸出結果：

```cpp=
換行 :
顯示單引號 : '
顯示雙引號 : "
顯示反斜線 : \
退格 : 退 退格
水平縮排 :      水平縮排
垂直縮排 :
垂直縮排
```

C++ 運算子（Operator）
---

C++ 有支援以下運算子：

* 算術運算子
* 關係運算子
* 邏輯運算子
* 位元運算子
* 指定運算子

在步入介紹逐個運算子之前，我們需要了解以下的概念：

運算子是什麼？我們先來舉個例子：

1 + 1

看到這個，~~你腦海裡浮現過後的第一個念頭肯定會是 2~~。

讓我們看到 ***1***，它其實就叫做運算元。

「***+***」是運算子。

「***1 + 1***」，被稱為（運算式，或稱表達式：expression）

元是資料型態，子是要進行何種操作（像是加法）。

運算式就是運算元加上運算子的結構。

讓我們來整理一下：

* 運算元（Operand）：在運算式中，運算元是資料的值。在例子「1 + 1」當中，兩個「1」都是運算元，運算元是被操作、運算的物件。

* 運算子（Operator）：運算子是一個進行操作的符號。在例子「1 + 1」當中，「+」就是一個運算子，表示加法操作、運算。

* 運算式（Expression）：運算式是由運算元和運算子組成的結構，用於進行計算並回傳結果。在例子中，「1 + 1」就是一個運算式，進行加法運算並回傳結果為「2」。

### 算術運算子（Arithmetic Operator）
---

算術運算子，其實就是數學運算子，很簡單，它就是專門在做加減乘除的事情。

以下是 C++ 的算術運算子：

| 運算子 | 描述 |
| -------- | -------- |
| + | 將兩個運算元相加。 |
| - | 第一個運算元減去第二個運算元。 |
| * | 將兩個運算元相乘。 |
| / | 相除。第一個運算元作為被除數，第二個作為除數。 |
| % | 稱為取模（mod），相當於除法運算當中的取得「餘數」。 |
| ++ | 遞增運算子，整數值+1。 |
| --（兩個減號） | 遞減運算子，整數值-1。 |

以下是有關於四則運算與取模運算子的範例：

```cpp=
#include <iostream>
using namespace std;

int main(){
    cout << 1 + 1 << endl;
    cout << 1 - 1 << endl;
    cout << 1 * 1 << endl;
    cout << 1 / 2 << endl;
    cout << 1 % 2 << endl;
    return 0;
}
```

輸出結果：

```cpp=
2
0
1
0
1
```

看到這個輸出結果，你可能會疑惑說，為什麼 1 / 2 的結果不會是 0.5 呢？而是 0。

那這個就是有關於資料型態的部分啦！

像是我們在程式當中所看到的，其實都是屬於 int 資料型態的類別，那要有小數點，我們可使用 float、double 這類的資料型態。

具體來說程式碼應該可像以下這樣修改：

```cpp=
#include <iostream>
using namespace std;

int main(){
    cout << 1.0 + 1.0 << endl;
    cout << 1.0 - 1.0 << endl;
    cout << 1.0 * 1.0 << endl;
    cout << 1.0 / 2.0 << endl;
    cout << 1 % 2 << endl;
    return 0;
}
```

輸出結果：

```cpp=
2
0
1
0.5
1
```

至於為什麼在取模運算子時，不能夠使用 1.0、2.0 這類的浮點數寫法呢？原因是這樣的，執行時會出現以下錯誤：

```cpp=
types 'double' and 'double' to binary 'operator%'
```

所以說取模運算子只能運用在於整數型態（int）的部分。

如果我們只將一個數字改成浮點數的形式會是怎樣的呢？另外它的資料型態會改變嗎？

```cpp=
#include <iostream>
#include <typeinfo> // New Change
using namespace std;

int main(){
    cout << 1.0 + 1.0 << endl;
    cout << 1.0 - 1.0 << endl;
    cout << 1.0 * 1.0 << endl;
    cout << typeid(1.0 / 2).name() << endl; // New Change
    cout << 1 % 2 << endl;
    return 0;
}
```

輸出結果：

```cpp=
2
0
1
d
1
```

順帶一提，在 C++ 當中如果我們要查看一個物件的資料型態的話，我們可以引入 typeinfo 這個標頭檔。

```cpp=
#include <typeinfo>
```

使用 typeid(數值).name() 就能夠查看這個數值的資料型態了！

i：int，整數。

f：float，單精度浮點數。

d：double，雙精度浮點數。

Ss：String，字串。

c：字元。

可以從上面範例的輸出結果得到 d，表示是一個雙精度浮點數。

### 遞增遞減運算子（++、--）
---

遞增遞減運算子有所謂的前置、後置的規則，也就是前綴、後綴的意思。

比如說一個變數 x，如下：

```cpp=
++x
```

以上是前置，前綴。

```cpp=
x++
```

以上是後置，後綴。

~~前置就是放在前面，後置就是放在後面。~~ 純屬幹話(X

以下是有關於個別遞增遞減運算子的效力：

```cpp=
x = x + 1;
// 等於
x++;
```

```cpp=
x = x - 1;
// 等於
x--;
```

如果是將 ++、-- 放在前面，則當我們運算式在完成運算「之前」會自動遞增或遞減，然後並不會自動將遞增或遞減後的值放到變數當中。

放在後面則是在運算式完成「之後」自動遞增遞減，然後將遞增或遞減值加入到變數當中。

以下是一個範例：

```cpp=
#include <iostream>
using namespace std;

int main(){
    int a = 10;
    int c;
    c = a++;
    cout << "After a++ of c : " << c << endl;
    cout << "a : " << a << endl;
    c = ++a;
    cout << "After ++a of c : " << c << endl;
    cout << "a : " << a << endl;
    return 0;
}
```

輸出結果：

```cpp=
After a++ of c : 10
a : 11
After ++a of c : 12
a : 12
```

### 關係運算子、比較運算子（Relational operator or Comparison operator）
---

| 運算子 | 描述 |
| -------- | -------- |
| == | 比較兩個運算元是否相等。是則回傳 true，不是則回傳 false。 |
| != | 比較兩個運算元是否「***不***」相等。是則回傳 true，不是則回傳 false。 |
| > | 比較左運算元是否大於右運算元。是則回傳 true，不是則回傳 false。 |
| < | 比較左運算元是否小於右運算元。是則回傳 true，不是則回傳 false。 |
| >= | 比較左運算元是否「***大於或等於***」右運算元。是則回傳 true，不是則回傳 false。 |
| <= | 比較左運算元是否「***小於或等於***」右運算元。是則回傳 true，不是則回傳 false。 |

比較運算子就是字面上的意思，***比大小啦！！！***

```cpp=
#include <iostream>
using namespace std;

int main(){
    int a = 10;
    int b = 20;

    if (a == b) {
        cout << "a == b : " << "true" << endl;
    } else {
        cout << "a == b : " << "false" << endl;
    }

    if (a != b) {
        cout << "a != b : " << "true" << endl;
    } else {
        cout << "a != b : " << "false" << endl;
    }

    if (a > b) {
        cout << "a > b : " << "true" << endl;
    } else {
        cout << "a > b : " << "false" << endl;
    }

    if (a < b) {
        cout << "a < b : " << "true" << endl;
    } else {
        cout << "a < b : " << "false" << endl;
    }

    if (a >= b) {
        cout << "a >= b : " << "true" << endl;
    } else {
        cout << "a >= b : " << "false" << endl;
    }

    if (a <= b) {
        cout << "a <= b : " << "true" << endl;
    } else {
        cout << "a <= b : " << "false" << endl;
    }

    return 0;
}
```

哇，靠，好長一串程式碼。

不用擔心，這些其實都只是簡單的條件判斷而已，

在 C++ 當中，使用 if 做條件判斷，意思就是如果。

我們要使用 if 做條件判斷，則條件是需要被兩個小括號給括起來的，像是這樣：

if (a == b){
    a == b 如果是 True 的話這邊才會執行哦！
}

然後以兩個中括號將要執行的程式碼包圍起來。（前提是 a == b 要是 true）

而預設條件判斷會自動判斷 true，只有 true 才會執行中括號的程式碼。

而 else 語句則是判斷說：如果上層的條件（if）的條件不成立的話，也就是實際執行 a == b 有可能是 false，那就會執行 else 然後中括號裡面的程式碼。

接下來，讓我們看看程式碼執行的結果：

```cpp=
a == b : false
a != b : true
a > b : false
a < b : true
a >= b : false
a <= b : true
```

然後接著我們一起來檢查 a、b 之間的值：

a == b，首先一開始我們設定變數 a = 10、b = 20，想必兩個值肯定不會相同嘛，false。

a != b，這是對的，a 確實不等於 b，所以會顯示 true。

a > b，這是錯的，a 小於 b，所以顯示 false。

a < b，這是對的，a 小於 b，所以顯示 true。

a >= b，這是錯的，a 不可能大於或等於 b，所以顯示 false。

a <= b，這是對的，a 小於或等於 b，所以顯示 true。

總結
---

常數（Const）是一個值（value）不能變動的數。

定義方式：

```cpp=
#define identifier value
```

或

```cpp=
const type variable = value;
```

跳脫字元是一種特殊字元，能夠對字串或字元進行特殊的操作，以反斜線「\」加上其他字元結合而成，像是 \n，代表換行的意思。

C++ 有支援以下運算子：

* 算術運算子
* 關係運算子
* 邏輯運算子
* 位元運算子
* 指定運算子

今天講到了算術運算子與關係運算子。

運算元：資料型態的值，被運算的物件。

運算子：能夠對運算元運算的符號。像是 +，能夠進行 1 + 1 運算。

運算式：也可稱為表達式，由運算元跟運算子組合而成，1 + 1 整體是一個運算式。

算術運算子：

基本的加減乘除（+、-、*、/）符號，加上一個取餘數的符號「%」。

++、--（加加、減減）稱為遞增、遞減運算子，自加、減 1，前置後置有差別。

後置可以使運算子的前一個變數自加、減 1，前置不變。

後置表示在運算式完成後才會自加自減。

前置表示在運算式完成前自加自減。

關係運算子：

又可稱為比較運算子，主要用於比較。（~~來廁所~~***比大小啦！！！***）

真的是比大小，沒騙你XD

「==」 （比較兩數是否相等）

「>」 （比較左數是否大於右數）

「<」 （比較左數是否小於右數）

「>=」 （比較左數是否大於或等於右數）

「<=」 （比較左數是否小於或等於右數）

參考資料
---

[C++ 常量 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-constants-literals.html)

[C++教學(三):變數與常數－做 個 有 趣 的 人｜痞客邦](https://lionrex.pixnet.net/blog/post/48766544)

[const (C++) | Microsoft Learn](https://learn.microsoft.com/zh-tw/cpp/cpp/const-cpp?view=msvc-170)

[C++中单引号双引号的区别_c++单引号和双引号的区别-CSDN博客](https://blog.csdn.net/m0_60753114/article/details/124089958)

[文章三 c++ 的跳脫字元－angel123的部落格｜痞客邦](https://angel12569.pixnet.net/blog/post/37604839-%E6%96%87%E7%AB%A0%E4%B8%89-c%2B%2B-%E7%9A%84%E8%B7%B3%E8%84%AB%E5%AD%97%E5%85%83)

[C++ 自增自减运算符 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-increment-decrement-operators.html)

[iT 邦幫忙::一起幫忙解決難題，拯救 IT 人的一天](https://ithelp.ithome.com.tw/m/articles/10296345)

[C++ 用 typeid 查詢變數型態－程式語言教學｜痞客邦](https://crmne0707.pixnet.net/blog/post/316536150-c%2B%2B-%E7%94%A8-typeid-%E6%9F%A5%E8%A9%A2%E8%AE%8A%E6%95%B8%E5%9E%8B%E6%85%8B)

[C++ 印出變數類型 | ShengYu Talk](https://shengyu7697.github.io/cpp-typeid/)

[C++ 运算符 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-operators.html)