算術運算子

基本算術

返回一個值,該值是使用相關的數學運算將左手運算元應用於右手運算元的結果。正交的換向數學規則適用(即加法和乘法是交換,減法,除法和模數不是)。

加法運算子

加法運算子(+)用於將兩個運算元相加。例:

#include <stdio.h>

int main(void)
{
    int a = 5;
    int b = 7;

    int c = a + b; /* c now holds the value 12 */

    printf("%d + %d = %d",a,b,c); /* will output "5 + 7 = 12" */

    return 0;
}

減法運算子

減法運算子(-)用於從第一個減去第二個運算元。例:

#include <stdio.h>

int main(void)
{
    int a = 10;
    int b = 7;

    int c = a - b; /* c now holds the value 3 */

    printf("%d - %d = %d",a,b,c); /* will output "10 - 7 = 3" */

    return 0;
}

乘法運算子

乘法運算子(*)用於乘以兩個運算元。例:

#include <stdio.h>

int main(void)
{    
    int a = 5;
    int b = 7;

    int c = a * b; /* c now holds the value 35 */

    printf("%d * %d = %d",a,b,c); /* will output "5 * 7 = 35" */

    return 0;
}

不要與* dereference 運算子混淆。

分部運算子

除法運算子(/)將第一個運算元除以第二個運算元。如果除法的兩個運算元都是整數,它將返回一個整數值並丟棄餘數(使用模運算子%來計算和獲取餘數)。

如果其中一個運算元是浮點值,則結果是該分數的近似值。

例:

#include <stdio.h>

int main (void)
{
    int a = 19 / 2 ; /* a holds value 9   */
    int b = 18 / 2 ; /* b holds value 9   */
    int c = 255 / 2; /* c holds value 127 */
    int d = 44 / 4 ; /* d holds value 11  */
    double e = 19 / 2.0 ; /* e holds value 9.5   */
    double f = 18.0 / 2 ; /* f holds value 9.0   */
    double g = 255 / 2.0; /* g holds value 127.5 */
    double h = 45.0 / 4 ; /* h holds value 11.25 */

    printf("19 / 2 = %d\n", a);    /* Will output "19 / 2 = 9"    */
    printf("18 / 2 = %d\n", b);    /* Will output "18 / 2 = 9"    */
    printf("255 / 2 = %d\n", c);   /* Will output "255 / 2 = 127" */
    printf("44 / 4 = %d\n", d);    /* Will output "44 / 4 = 11"   */
    printf("19 / 2.0 = %g\n", e);  /* Will output "19 / 2.0 = 9.5"    */
    printf("18.0 / 2 = %g\n", f);  /* Will output "18.0 / 2 = 9"      */
    printf("255 / 2.0 = %g\n", g); /* Will output "255 / 2.0 = 127.5" */
    printf("45.0 / 4 = %g\n", h);  /* Will output "45.0 / 4 = 11.25"  */

    return 0;
}

模數運算子

模運算子(%)僅接收整數運算元,並用於計算第一個運算元除以第二個運算元後的餘數。例:

#include <stdio.h>

int main (void) {
    int a = 25 % 2;    /* a holds value 1  */
    int b = 24 % 2;    /* b holds value 0  */
    int c = 155 % 5;   /* c holds value 0  */
    int d = 49 % 25;   /* d holds value 24 */

    printf("25 % 2 = %d\n", a);     /* Will output "25 % 2 = 1"    */
    printf("24 % 2 = %d\n", b);     /* Will output "24 % 2 = 0"    */
    printf("155 % 5 = %d\n", c);    /* Will output "155 % 5 = 0"   */
    printf("49 % 25 = %d\n", d);    /* Will output "49 % 25 = 24"  */

    return 0;
}

增量/減量運算子

增量(a++)和減量(a--)運算子的不同之處在於它們在沒有賦值運算子的情況下更改應用它們的變數的值。你可以在變數之前或之後使用遞增和遞減運算子。操作符的放置將值的遞增/遞減的定時更改為在將其賦值給變數之前或之後。例:

#include <stdio.h>

int main(void)
{
    int a = 1;
    int b = 4;
    int c = 1;
    int d = 4;

    a++;
    printf("a = %d\n",a);    /* Will output "a = 2" */
    b--;
    printf("b = %d\n",b);    /* Will output "b = 3" */

    if (++c > 1) { /* c is incremented by 1 before being compared in the condition */
        printf("This will print\n");    /* This is printed */
    } else {
        printf("This will never print\n");    /* This is not printed */
    }

    if (d-- < 4) {  /* d is decremented after being compared */
        printf("This will never print\n");    /* This is not printed */
    } else {
        printf("This will print\n");    /* This is printed */
    }
}

正如 cd 的示例所示,兩個運算子都有兩種形式,如字首表示法和字尾表示法。兩者在遞增(++)或遞減(--)變數時具有相同的效果,但它們返回的值不同:字首操作首先執行操作然後返回值,而字尾操作首先確定要返回的值,然後做操作。

由於這種潛在的反直覺行為,在表示式中使用遞增/遞減運算子是有爭議的。