C語言中的算術運算子



C語言中的算術運算子是一些特殊的預定義符號,用於執行算術運算。我們熟悉基本的算術運算——加法、減法、乘法和除法。C語言是一種計算語言,因此這些運算子對於執行計算機化過程至關重要。

除了上述分別分配給四個符號+*/的運算之外,C語言還有一個名為模運算子的算術運算子,我們使用%符號。

下表列出了C語言中的算術運算子:

運算子 描述
+ 將兩個運算元相加。
從第一個運算元中減去第二個運算元。
* 將兩個運算元相乘。
/ 將分子除以分母。
% 模運算子,返回整數除法後的餘數。
++ 自增運算子將整數值增加一。
-- 自減運算子將整數值減少一。

上表中也列出了++--運算子。我們將在單獨的章節中學習自增和自減運算子。

示例:C語言中的算術運算子

以下示例演示如何在C程式中使用這些算術運算子:

#include <stdio.h>

int main(){

   int op1 = 10;
   int op2 = 3;

   printf("Operand1: %d Operand2: %d \n\n", op1, op2);  
   printf("Addition of op1 and op2: %d\n", op1 + op2);
   printf("Subtraction of op2 from op1: %d\n", op1 - op2);
   printf("Multiplication of op1 and op2: %d\n", op1 * op2);
   printf("Division of op1 by op2: %d\n", op1/op2);

   return 0;
}

輸出

執行此程式碼時,將產生以下輸出:

Operand1: 10 Operand2: 3

Addition of op1 and op2: 13
Subtraction of op2 from op1: 7
Multiplication of op1 and op2: 30
Division of op1 by op2: 3

C語言中的型別強制轉換

前三個結果符合預期,但除法的結果並非如此。您期望10/3是一個分數(3.333333)。這是因為我們使用%d格式說明符來列印除法的結果嗎?如果我們將程式碼的最後一行更改如下:

printf("Division of op1 by op2: %f\n", op1/op2);

現在除法運算的結果將是“0.000000”,這更令人驚訝。C語言之所以這樣表現,是因為整數與另一個整數相除總是返回一個整數。

要獲得浮點除法,至少一個運算元必須是浮點數,或者您需要使用型別轉換運算子將其中一個整數運算元更改為浮點數。

現在,將給定程式的最後一個printf語句更改如下:

printf("Division of op1 by op2: %f\n", (float)op1/op2);

再次進行此更改後執行程式碼,它將顯示正確的除法結果:

Division of op1 by op2: 3.333333

注意:如果對浮點表示式使用%d格式說明符,它將始終導致“0”。

示例

至少有一個浮點(或雙精度)運算元的算術運算的結果始終是浮點數。請看以下示例:

#include <stdio.h>

int main(){

   int op1 = 10;
   float op2 = 2.5;

   printf("Operand1: %d Operand2: %f\n", op1, op2);
   printf("Addition of op1 and op2: %f\n", op1 + op2);
   printf("Subtraction of op2 from op1: %f\n", op1 - op2);
   printf("Multiplication of op1 and op2: %f\n", op1 * op2);
   printf("Division of op1 by op2: %f\n", op1/op2);

   return 0;
}

輸出

執行程式碼並檢查其輸出:

Operand1: 10 Operand2: 2.500000
Addition of op1 and op2: 12.500000
Subtraction of op2 from op1: 7.500000
Multiplication of op1 and op2: 25.000000
Division of op1 by op2: 4.000000

使用char資料型別的算術運算

在C語言中,char資料型別是int型別的子集。因此,我們可以對char運算元執行算術運算。

示例

以下示例顯示如何對兩個運算元執行算術運算,其中一個運算元為“char”型別:

#include <stdio.h>

int main(){

   char op1 = 'F';
   int op2 = 3;

   printf("operand1: %c operand2: %d\n", op1, op2);
   printf("Addition of op1 and op2: %d\n", op1 + op2);
   printf("Subtraction of op2 from op1: %d\n", op1 - op2);
   printf("Multiplication of op1 and op2: %d\n", op1 * op2);
   printf("Division of op1 by op2: %d\n", op1/op2);

   return 0;
}

輸出

執行程式碼並檢查其輸出:

operand1: F operand2: 3

Addition of op1 and op2: 73
Subtraction of op2 from op1: 67
Multiplication of op1 and op2: 210
Division of op1 by op2: 23

由於char資料型別是int的子集,因此%c格式說明符將返回與%d說明符返回的整數關聯的ASCII字元。

如果兩個char運算元之間的任何算術運算導致整數超出char的範圍,則%c說明符將顯示空白。

C語言中的模運算子

模運算子(%)返回除法運算的餘數。

示例

請看以下示例:

#include <stdio.h>

int main(){

   int op1 = 10;
   int op2 = 3;

   printf("Operand1: %d Operand2: %d\n", op1, op2);
   printf("Modulo of op1 and op2: %d\n", op1%op2);

   return 0;
}

輸出

執行程式碼並檢查其輸出:

Operand1: 10 Operand2: 3
Modulo of op1 and op2: 1

模運算子需要兩個int型別的運算元。如果不是,編譯器會給出型別不匹配錯誤。例如,在上例程式碼中將“op1”的資料型別更改為float,然後再次執行程式:

float op1 = 10;
int op2 = 3;
printf("Modulo of op1 and op2: %d\n", op1%op2);

現在,您將收到一條型別不匹配錯誤,顯示以下訊息:

error: invalid operands to binary % (have 'float' and 'int')

儘管它允許char運算元進行模運算。

C語言中的否定運算子

由符號++--表示的自增和自減運算子是一元運算子。它們已在單獨的章節中介紹。“”符號表示減法運算子,也充當一元否定運算子。

示例

以下示例重點介紹如何在C語言中使用否定運算子:

#include <stdio.h>

int main(){

   int op1 = 5;
   int op2 = -op1;

   printf("Operand1: %d Operand2: %d\n", op1, op2);

   return 0;
}

輸出

執行此程式碼時,將產生以下輸出:

Operand1: 5 Operand2: -5

在上例中,“–”符號返回op1的負值,並將相同的負值賦值給op2。

c_operators.htm
廣告