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