C++運算子:您進入編程魔法的門戶
你好,未來的編程魔法師!今天,我們將踏上一段令人興奮的旅程,進入C++運算子的世界。別擔心如果你從未寫過一行代碼——我在這裡將引導你一步步前進,正如我這些年來為無數學生所做的那樣。所以,拿起你的虛擬魔杖(鍵盤),讓我們施展出一些編程魔法吧!

運算子是什麼?
在我們深入之前,讓我們先了解一下運算子是什麼。在C++中,運算子是特殊的符號,告訴計算機執行特定的數學或邏輯操作。可以把它們想像成你魔法書中的魔法治詞——每一個都有獨特的作用!
算術運算子
讓我們從基礎開始——算術運算子。這些可能對你來說很熟悉,因為你在數學課上已經學過它們,但現在我们要用它們來讓計算機為我們進行計算!
以下是C++中的算術運算子表:
| 運算子 | 描述 | 示例 |
|---|---|---|
| + | 加法 | a + b |
| - | 減法 | a - b |
| * | 乘法 | a * b |
| / | 除法 | a / b |
| % | 餘數(模) | a % b |
| ++ | 自增 | a++ 或 ++a |
| -- | 自減 | a-- 或 --a |
讓我們看看它們是如何工作的:
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 3;
cout << "a + b = " << a + b << endl; // 輸出:13
cout << "a - b = " << a - b << endl; // 輸出:7
cout << "a * b = " << a * b << endl; // 輸出:30
cout << "a / b = " << a / b << endl; // 輸出:3
cout << "a % b = " << a % b << endl; // 輸出:1
cout << "a++ = " << a++ << endl; // 輸出:10
cout << "Now a = " << a << endl; // 輸出:11
cout << "++b = " << ++b << endl; // 輸出:4
cout << "Now b = " << b << endl; // 輸出:4
return 0;
}
在這個例子中,我們進行各種算術操作。注意a++輸出10但然後a變成11?這是因為a++是後置增量——它先使用值,然後增加它。另一方面,++b是前置增量——它先增加值,然後使用它。
邏輯運算子
接下來,我們將為我們的魔法添加一些邏輯!邏輯運算子用於組合條件語句。
以下是邏輯運算子的表:
| 運算子 | 描述 | 示例 |
|---|---|---|
| && | 邏輯AND | a && b |
| || | 邏輯OR | a || b |
| ! | 邏輯NOT | !a |
讓我們用這些來施展一個魔法:
#include <iostream>
using namespace std;
int main() {
bool a = true, b = false;
cout << "a && b is " << (a && b) << endl; // 輸出:0 (false)
cout << "a || b is " << (a || b) << endl; // 輸出:1 (true)
cout << "!a is " << (!a) << endl; // 輸出:0 (false)
cout << "!b is " << (!b) << endl; // 輸出:1 (true)
return 0;
}
在這個神奇的咒語中,我們使用邏輯運算符來組合或否定布爾值。&&只有在兩個操作數都為真時才返回真,\|\|只要至少一個操作數為真就返回真,而!則否定布爾值。
比特運算子
現在,我們進入了進階魔法的領域——比特運算子。這些運算符對整數值的個別位進行操作。它們就像是編程世界的微魔法!
以下是比特運算子的表:
| 運算子 | 描述 | 示例 |
|---|---|---|
| & | 比特AND | a & b |
| | | 比特OR | a | b |
| ^ | 比特XOR | a ^ b |
| ~ | 比特NOT | ~a |
| << | 左移 | a << n |
| >> | 右移 | a >> n |
讓我們看看一些比特魔法:
#include <iostream>
using namespace std;
int main() {
unsigned int a = 60; // 60 = 0011 1100 在二進制
unsigned int b = 13; // 13 = 0000 1101 在二進制
cout << "a & b = " << (a & b) << endl; // 輸出:12 (0000 1100 在二進制)
cout << "a | b = " << (a | b) << endl; // 輸出:61 (0011 1101 在二進制)
cout << "a ^ b = " << (a ^ b) << endl; // 輸出:49 (0011 0001 在二進制)
cout << "~a = " << (~a) << endl; // 輸出:-61 (1100 0011 在二進制)
cout << "a << 2 = " << (a << 2) << endl; // 輸出:240 (1111 0000 在二進制)
cout << "a >> 2 = " << (a >> 2) << endl; // 輸出:15 (0000 1111 在二進制)
return 0;
}
這個咒語可能看起來有點複雜,但它是在對我們數字的個別位進行操作。例如,&對每對相應的位進行AND操作,|進行OR,以此類推。位移操作<<和>>將所有位向左或向右移動指定數量的位置。
賦值運算子
賦值運算子用於將值賦給變量。它們就像是寫在魔法書中的筆!
以下是賦值運算子的表:
| 運算子 | 描述 | 示例 |
|---|---|---|
| = | 簡單賦值 | a = b |
| += | 加並賦值 | a += b |
| -= | 減並賦值 | a -= b |
| *= | 乘並賦值 | a *= b |
| /= | 除並賦值 | a /= b |
| %= | 餘數並賦值 | a %= b |
| <<= | 左移並賦值 | a <<= b |
| >>= | 右移並賦值 | a >>= b |
| &= | 比特AND並賦值 | a &= b |
| ^= | 比特XOR並賦值 | a ^= b |
| |= | 比特OR並賦值 | a |= b |
讓我們在魔法書中寫下一些值:
#include <iostream>
using namespace cout;
int main() {
int a = 10;
cout << "Initial value of a: " << a << endl;
a += 5; // 等同於:a = a + 5
cout << "After a += 5: " << a << endl;
a -= 3; // 等同於:a = a - 3
cout << "After a -= 3: " << a << endl;
a *= 2; // 等同於:a = a * 2
cout << "After a *= 2: " << a << endl;
a /= 4; // 等同於:a = a / 4
cout << "After a /= 4: " << a << endl;
a %= 3; // 等同於:a = a % 3
cout << "After a %= 3: " << a << endl;
return 0;
}
在這個神奇的腳本中,我們使用各種賦值運算符來修改a的值。這些運算符將賦值與另一個操作組合起來,使我們的代碼更簡潔。
雜項運算子
C++還有一些其他運算符,它們不適合輕易地歸入其他類別。它們就像是我們魔法牌組中的野生牌!
以下是雜項運算子的表:
| 運算子 | 描述 | 示例 |
|---|---|---|
| sizeof | 返回變量的大小 | sizeof(a) |
| ?: | 三元運算子 | condition ? expr1 : expr2 |
| & | 返回變量的地址 | &a |
| * | 指向變量的指針 | *ptr |
| . | 讓我們訪問結構變量的成員或類對象的成員 | object.member |
| -> | 通過指針訪問結構或類的成員 | ptr->member |
讓我們看看一些這些是如何工作的:
#include <iostream>
using namespace cout;
int main() {
int a = 10;
int* ptr = &a;
cout << "Size of int: " << sizeof(int) << " bytes" << endl;
cout << "Value of a: " << a << endl;
cout << "Address of a: " << &a << endl;
cout << "Value pointed by ptr: " << *ptr << endl;
int b = (a > 5) ? 1 : 0;
cout << "b = " << b << endl;
return 0;
}
在這個神奇的咒語中,我們使用sizeof來獲取整數的大小,&來獲取a的地址,*來解引用指針,以及三元運算符?:作為if-else語句的簡寫。
運算子優先級在C++
就像在數學中一樣,C++運算符有一個優先級的層次。這決定了在表達式中操作的執行順序。這就像魔法決鬥的規則——一些咒語優先於其他咒語!
以下是運算符優先級的簡化表(從最高到最低):
| 優先級 | 運算子 |
|---|---|
| 1 | :: |
| 2 | () [] -> . ++ -- |
| 3 | ! ~ ++ -- + - * & (type) sizeof |
| 4 | * / % |
| 5 | + - |
| 6 | << >> |
| 7 | < <= > >= |
| 8 | == != |
| 9 | & |
| 10 | ^ |
| 11 | | |
| 12 | && |
| 13 | || |
| 14 | ?: |
| 15 | = += -= *= /= %= >>= <<= &= ^= |= |
| 16 | , |
記住,你總是可以使用括號來覆蓋默認的優先級,並明確指定操作的順序。
好了,年輕的魔法師們!你們剛剛完成了C++運算子魔法的第一課。記住,熟能生巧,所以請繼續練習這些編程咒語,直到它們變得習以為常。在你知不觉間,你將能夠輕鬆地創建複雜的程序。祝賀編程,願你的編譯錯誤少之又少!
Credits: Image by storyset
