C 速查手冊

運算式

運算式 (expression) 由運算元 (operand) 與運算子 (operator) 所組成,每個運算式都會計算出一個值,最簡單的運算式為常數運算式,也就是只有以常數為運算元的運算式,如

#include <stdio.h>

int main(void)
{
    if (1) {
        printf("Hello, world!\n");
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:constexpr.c
    功能:示範常數運算式
    作者:張凱慶 */

注意 if 這一行

if (1) {

if 後面所接的小括弧需要一個運算式,此處只代入整數 1 ,亦即為常數運算式。

編譯執行結果如下

$ gcc constexpr.c
$ a.out
Hello, world!

呼叫函數也屬於運算式的一種,如

#include <stdio.h>

int main(void)
{
    int i;

    if (scanf("%d", &i)) {
        printf("i = %d\n", i);
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:funexpr.c
    功能:示範呼叫函數當作運算式
    作者:張凱慶 */

由於函數 scanf() 執行失敗會回傳 0 ,而成功會回傳非 0 的整數值,所以放在 if 陳述中的條件運算式裡的時候,若執行成功就會印出以下 i 等於輸入整數的文字。

編譯以上程式然後執行,如下

$ gcc constexpr.c
$ a.out

此時程式在等待使用者輸入,這裡輸入 22 ,結果如下

22
i = 22
$

由運算子與運算元所組成的運算式,會依結合規則及優先次序進行計算,全部運算子如下列表

運算子結合規則
() [] -> .左到右
! ~ ++ -- + - * & (type) sizeof右到左
* / %左到右
+ -左到右
<< >%gt;左到右
< <= > >=左到右
== !=左到右
&左到右
^左到右
|左到右
&&左到右
||左到右
?:右到左
= += -= /= %= &=右到左
^= |= <<= >>=右到左
,左到右

其中,小括弧具有最高的優先權,因此當運算式中任何部份需要先計算時,可以直接用小括號圍起來,無須考量運算子的優先次序。如以下程式

#include <stdio.h>

int main(void)
{
    printf("%d\n", 15 + 2 * 8);
    printf("%d\n", 15 + (2 * 8));
    printf("%d\n", (15 + 2) * 8);
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://kaiching.org/
    檔名:parenexpr.c
    功能:示範小括弧影響計算的優先次序
    作者:張凱慶 */

第 5 行及第 6 行的結果相同,因為原本乘法的優先次序就高於加法,第 7 行的小括弧圍住加法的部份,因此加法會先進行計算。

編譯此程式,結果如下

$ gcc parenexpr.c
$ a.out
31
31
136
$

C 語言的運算式可以很複雜,小括弧在複雜運算式中有助於理解計算次序。以下,我們分開討論各種運算子所組成的運算式

回 C 速查手冊首頁