遞增 (increment) 及遞減 (decrement) 為單元運算子 (unary operator) ,也就是說只需要一個運算元即構成運算式,但在運算元有前後的差別
運算子 | 功能 | 範例 |
---|---|---|
++ | 前遞增 | ++a |
++ | 後遞增 | a++ |
-- | 前遞減 | --a |
-- | 後遞減 | a-- |
前遞增是先進行遞增,例如
a = 3; | |
b = 5; | |
c = a + ++b; // c = 3 + 6 | |
// a = 3, b = 6 |
變數 b 先遞增,然後才會與變數 a 相加。後遞增則相反,運算式完成後才會做遞增的動作,例如
a = 3; | |
b = 5; | |
c = a + b++; // c = 3 + 5 | |
// a = 3, b = 6 |
同樣的,遞減的前、後之別與遞增雷同,前遞減會在運算式之前遞減,後遞減則是在運算式完成後才遞減。
以下是整數型態做遞增運算的例子
001 | #include <iostream> |
002 | |
003 | int main() { |
004 | int a = 1; |
005 | |
006 | std::cout << a++ |
007 | << std::endl; |
008 | std::cout << ++a |
009 | << std::endl; |
010 | std::cout << a++ |
011 | << std::endl; |
012 | std::cout << a |
013 | << std::endl; |
014 | |
015 | return 0; |
016 | } |
017 | |
018 | /* Kaiching Chang |
019 | u0402_1.cpp |
020 | 2014-02 */ |
編譯後執行,結果如下
$ g++ u0402_1.cpp |
$ ./a.out |
1 |
3 |
3 |
4 |
$ |
以下為整數型態做遞減運算的例子
001 | #include <iostream> |
002 | |
003 | int main() { |
004 | int a = 1; |
005 | |
006 | std::cout << a-- |
007 | << std::endl; |
008 | std::cout << --a |
009 | << std::endl; |
010 | std::cout << a-- |
011 | << std::endl; |
012 | std::cout << a |
013 | << std::endl; |
014 | |
015 | return 0; |
016 | } |
017 | |
018 | /* Kaiching Chang |
019 | u0402_2.cpp |
020 | 2014-02 */ |
編譯後執行,結果如下
$ g++ u0402_2.cpp |
$ ./a.out |
1 |
-1 |
-1 |
-2 |
$ |
以下為浮點數型態做遞增運算的例子
001 | #include <iostream> |
002 | |
003 | int main() { |
004 | double a = 1.2; |
005 | |
006 | std::cout << a++ |
007 | << std::endl; |
008 | std::cout << ++a |
009 | << std::endl; |
010 | std::cout << a++ |
011 | << std::endl; |
012 | std::cout << a |
013 | << std::endl; |
014 | |
015 | return 0; |
016 | } |
017 | |
018 | /* Kaiching Chang |
019 | u0402_3.cpp |
020 | 2014-02 */ |
編譯後執行,結果如下
g++ u0402_3.cpp |
$ ./a.out |
1.2 |
3.2 |
3.2 |
4.2 |
$ |
以下為浮點數型態做遞減運算的例子
001 | #include <iostream> |
002 | |
003 | int main() { |
004 | double a = 1.2; |
005 | |
006 | std::cout << a-- |
007 | << std::endl; |
008 | std::cout << --a |
009 | << std::endl; |
010 | std::cout << a-- |
011 | << std::endl; |
012 | std::cout << a |
013 | << std::endl; |
014 | |
015 | return 0; |
016 | } |
017 | |
018 | /* Kaiching Chang |
019 | u0402_4.cpp |
020 | 2014-02 */ |
編譯後執行,結果如下
$ g++ u0402_4.cpp |
$ ./a.out |
1.2 |
-0.8 |
-0.8 |
-1.8 |
$ |
字元型態也可以做遞增及遞減運算,例如我們可依此特性印出 26 個英文小寫字母
001 | #include <iostream> |
002 | |
003 | int main() { |
004 | char var = 'a'; |
005 | |
006 | while (var <= 'z') { |
007 | std::cout << var++; |
008 | } |
009 | std::cout << std::endl; |
010 | |
011 | var -= 1; |
012 | while (var >= 'a') { |
013 | std::cout << var--; |
014 | } |
015 | std::cout << std::endl; |
016 | |
017 | return 0; |
018 | } |
019 | |
020 | /* Kaiching Chang |
021 | u0402_5.cpp |
022 | 2014-02 */ |
編譯後執行,結果如下
$ g++ u0402_5.cpp |
$ ./a.out |
abcdefghijklmnopqrstuvwxyz |
zyxwvutsrqponmlkjihgfedcba |
$ |
continue ...
沒有留言:
張貼留言