【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)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up