C++ 速查手冊 V1.00 - 單元 4.2 - 遞增、遞減運算




遞增 (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 ...

沒有留言: