C++運算子:您進入編程魔法的門戶

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

C++ Operators

運算子是什麼?

在我們深入之前,讓我們先了解一下運算子是什麼。在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