### 遞增/減運算子
----
<style>
.reveal .slides {
text-align: left;
}
</style>
簡而言之,他們就是讓運算子能夠「+1或-1」,舉例來說 :
----
```cpp=
int a_1 = 1, a_2 = 1;
a_1++;
a_2--;
printf("%d %d", a_1, a_2); //cout << a_1 << " " << a_2;
/*輸出:
2 0
*/
```
----
會發現結果是 a_1+1, a_2-1 ,所以我們可以大概分析成 :
```cpp=
a_1++ = a_1 + 1;
a_2-- = a_2 - 1;
```
----
不過**遞增/遞減運算子**只能放在變數後面嗎?
不!其實也是可以放在前面的。
----
舉例說明 :
```cpp=
int a_1 = 1, a_2 = 1;
++a_1;
--a_2;
printf("%d %d", a_1, a_2); //cout << a_1 << " " << a_2;
/*輸出:
2 0
```
----
其實你會發現 **遞增/遞減運算子** 放在後面與放在前面的結果一模一樣。
那,他們相同嗎?
----
No!,我們來比較一下:
```c=
int a = 7, b = 7;
printf("%d\n", ++a); //cout << ++a;
printf("%d", b++); //cout << b++;
/*輸出:
8
7
*/
```
----
為何不一樣了,不是應該要輸出8和8嗎?
----
其實不同的點在於「先後」順序。
```cpp=
int a = 7, b = 7;
printf("%d\n", ++a); //cout << ++a << "\n";
printf("%d", b++); //cout << b++;
```
* 第二行的執行順序是:(1)a=a+1 (2)printf。
* 第三行的執行順序是:(1)printf (2)b=b+1。
----
所以我們能利用拆解順序的方式來了解。
白話一點的講法就是:
* a++ -> 會先執行整行的敘述後再將a的值加1。
* ++a -> 先把a的值加1,再執行整行敘述。
----
### 兩數交換
----
假設我們目前有兩個數 a 和 b,並想要它們兩個之間的數值交換,那我們應該要怎麼做呢?
----
直觀的做法 :
```cpp=
int a = 2, b = 3;
a = b;
b = a;
printf("%d %d", a, b); //cout << a << " " << b;
/*輸出
3 3
/*
```
----
正確的做法 :
```cpp=
int a = 2, b = 3, tmp; //tmp也就是另外一個變數
tmp = a; //tmp先儲存a的值
a = b; //a被指派b的值
b = tmp; //b被指派tmp的值(也就是a的值)
printf("%d %d", a, b);
/*輸出
3 2
*/
```
----
{"metaMigratedAt":"2023-06-17T04:16:09.299Z","metaMigratedFrom":"YAML","title":"程式設計培訓 - (2)","breaks":true,"slideOptions":"{\"theme\":\"solarized\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"1dfd0d36-665c-414c-a3ba-995f194a8cb9\",\"add\":1716,\"del\":1}]"}