C語言中有哪些不同的運算子和表示式?


運算子是C語言中用於對值和變數執行操作的特殊符號。這些特殊符號允許我們以不同的方式操作資料和變數。這些運算子可分為以下幾類:

  • 算術運算子。
  • 關係運算符。
  • 邏輯運算子。
  • 賦值運算子。
  • 自增和自減運算子。
  • 位運算子。
  • 條件運算子。
  • 特殊運算子。

C語言中的表示式是由變數、運算子和值組合而成的,產生單個結果。表示式可以分為以下兩種型別:

  • 簡單表示式
  • 複雜表示式

讓我們先了解一下表達式,然後再簡要介紹運算子。

C語言中的簡單表示式

簡單表示式是由一個或多個值(運算元)和符號(運算子)混合而成,產生一個結果。它不包含複雜的部分,例如函式或巢狀表示式。簡單表示式通常只包含一個數學或邏輯運算。

以下是C語言中簡單表示式的示例

#include <stdio.h>

int main(){
   int a = 3;      // Operand
   int b = 6;      // Operand
   int sum = a + b; // Simple Expression adds up a and b
   printf("The sum is: %d
", sum); // Print the result. return 0; }

C語言中的複雜表示式

複雜表示式是指包含多個運算子和運算元的表示式。因此,它可以包含算術、邏輯、關係、位運算等操作來獲得結果。它還可以包含括號來維持正確的運算順序。

以下是C語言中複雜表示式的示例。

#include <stdio.h>

int main() {
   int a = 5;      // Operand
   int b = 10;     // Operand
   int c = 2;      // Operand
   int result;     // Variable to store the result
        
   // Complex expression: (a + b) * c - (b / a)
   result = (a + b) * c - (b / a);
        
   printf("The result of the complex expression is: %d
", result); // Print the result return 0; }

以下是C語言中運算子型別的詳細概述。

算術運算子

算術運算子用於數值計算(或)執行算術運算,例如加法、減法等。下表將幫助您更好地理解。

運算子 描述 示例 a=20,b=10 輸出
+ 加法 a+b 20+10 30
- 減法 a-b 20-10 10
* 乘法 a*b 20*10 200
/ 除法 a/b 20/10 2(商)
% 取模運算 a%b 20%10 0(餘數)

以下是算術運算子的C程式示例:

#include<stdio.h>
void main (){
   int a= 20, b = 10;
   printf (" %d", a+b);
   printf (" %d", a-b);
   printf (" %d", a*b);
   printf (" %d", a/b);
   printf (" %d", a%b);
}

輸出

執行上述程式時,將產生以下結果:

30
10
200
20

關係運算符

關係運算符用於比較兩個表示式,例如大於、小於、等於、不等於。下表提供了更清晰的說明。

運算子 描述 示例 a=20,b=10 輸出
< 小於 a<b 10<20 1
<= 小於等於 a<=b 10<=20 1
> 大於 a>b 10>20 0
>= 大於等於 a>=b 10>=20 0
== 等於 a==b 10==20 0
!= 不等於 a!=b 10!=20 1

關係表示式的輸出結果要麼為真(1),要麼為假(0)。

以下是關係運算符的C程式示例:

#include<stdio.h>
void main (){
   int a= 10, b = 20;
   printf (" %d", a<b);
   printf (" %d", a<=b);
   printf (" %d", a>b);
   printf (" %d", a>=b);
   printf (" %d", a ==b);
   printf (" %d", a !=b);
}

輸出

執行上述程式時,將產生以下結果:

1 1 0 0 0 1 1 1

邏輯運算子

邏輯運算子用於邏輯上組合2個或多個表示式。它們就像特殊的工具,可以幫助我們根據真或假答案在程式中做出決策。想象一下,你正在玩一個遊戲,你需要檢查是否滿足某些條件才能獲勝。例如,你可能需要知道你是否有足夠的積分以及是否收集了特殊的物品。邏輯運算子幫助我們一起測試這些情況,以便我們可以在程式中決定下一步做什麼。

邏輯運算子有三種類型。它們如下:

  • 邏輯與(&&)
  • 邏輯或(||)
  • 邏輯非(!)

邏輯與(&&)

邏輯與運算子(&&)是程式設計中一項基本工具,它允許我們檢查兩個條件是否同時為真。假設你有兩個問題,你想知道兩個答案是否都是“是”。如果是,則結果為真。如果兩個答案中任何一個為“否”,則結果為假。

下表顯示了與運算子的工作原理。

exp1 exp2 exp1&&exp2
T T T
T F F
F T F
F F F

邏輯或(||)

邏輯或運算子(||)在程式設計中非常有用。它允許我們檢查兩個條件中至少有一個是否為真。可以將其想象為提出兩個問題,並想知道其中任何一個問題是否得到“是”的答案。如果任一條件為真,則總體結果為真。如果兩者都為假,則結果為假。

下表提供了有關或(||)的更多詳細資訊。

exp1 exp2 exp1||exp2
T T T
T F T
F T T
F F F

邏輯非(!)

邏輯非運算子(!)是程式設計中一個獨特的工具,它可以幫助我們翻轉特定條件的真值。可以將其想象為一個開關,將“是”變成“否”,或將“真”變成“假”。如果某件事為真,則使用邏輯非運算子將使其變為假,如果某件事為假,則它將變為真。

下表提供了有關非運算子的更多詳細資訊

exp !exp
T F
F T

邏輯運算子總結及示例

運算子 描述 示例 a=20,b=10 輸出
&& 邏輯與 (a>b)&&(a<c) (10>20)&&(10<30) 0
|| 邏輯或 (a>b)||(a<=c) (10>20)||(10<30) 1
! 邏輯非 !(a>b) !(10>20) 1

以下是邏輯運算子的C程式示例:

#include<stdio.h>
void main (){
   int a= 10, b = 20, c= 30;
   printf (" %d", (a>b) && (a<c));
   printf (" %d", (a>b) || (a<c));
   printf (" %d", ! (a>b));
}

輸出

執行上述程式時,將產生以下結果:

0 1 1

賦值運算子

賦值運算子是幫助我們為變數賦值的符號。當我們想要將值儲存在變數中時,就會使用它們。賦值運算子的型別包括:

  • 簡單賦值。
  • 複合賦值。

簡單賦值

簡單賦值運算子(=)用於為變數賦值。它獲取右側的值並將其放入左側的變數中。就像將數字或單詞放入特定的盒子中一樣。

複合賦值

複合賦值運算子一次執行兩件事。首先,它們執行數學運算,例如加法、減法、乘法或除法,然後將結果儲存回同一個變數中。

下表包含賦值運算子及其示例:

運算子 描述 示例
= 簡單賦值 a=10
+=,-=,*=,/=,%= 複合賦值 a+=10"a=a+10
a=10"a=a-10

以下是賦值運算子的C程式示例:

#include<stdio.h>
void main (){
   int a= 10;
   printf (" %d", a);
   printf (" %d", a+=10);
}

輸出

執行上述程式時,將產生以下結果:

10
20

自增和自減運算子

讓我們瞭解一下什麼是自增運算子。

自增運算子(++)

此運算子將變數的值加1。

它包括兩種型別:

  • 前置自增
  • 後置自增

如果我們將自增運算子放在運算元之前,則稱為前置自增。稍後,先將值加1,然後對它執行下一個操作。

例如:

z = ++a; // a= a+1
z=a

如果我們將自增運算子放在運算元之後,則稱為後置自增,並且在執行操作後將值加1。

例如:

z = a++; // z=a
a= a+1

示例

以下是自增運算子的C程式示例:

#include <stdio.h>
void main() {
   int a= 10, z;
   z= ++a;
   printf("z=%d", z);
   printf("
a=%d", a); z= a++; printf("
z=%d", z); printf("
a=%d", a); }

輸出

執行上述程式時,將產生以下結果:

z=11
a=11
z=11
a=12

自減運算子(--)

它用於將變數的值減1。

它包括兩種型別:

  • 前置自減
  • 後置自減

如果自減運算子放在運算元之前,則稱為前置自減。在此,先將值減1,然後對它執行操作。

例如:

z = - - a; // a= a-1
z=a

如果自減運算子放在運算元之後,則稱為後置自減。在此,在執行操作後將值減1。

例如:

z = a--; // z=a
a= a-1

以下是自減運算子的C程式示例:

#include <stdio.h>

void main() {
   int a=10, z;
   z= --a;
   printf("z=%d", z);
   printf("
a=%d", a); z= a--; printf("
z=%d", z); printf("
a=%d", a); }

輸出

執行上述程式時,將產生以下結果:

z=9
a=9
z=9
a=8

位運算子

位運算子直接作用於數字的二進位制(位級)形式。在計算機中,數字以一系列0和1的形式儲存,稱為位。位運算子幫助我們直接操作這些位,這對於某些型別的程式設計任務非常有用。

位運算子的型別如下表所示

運算子 描述
& 按位與
| 按位或
^ 按位異或
<< 左移
>> 右移
~ 按位取反

C語言中的按位與(&)

按位與(&)運算子從右側開始逐位比較兩個數字。如果兩個位都為1,則結果為1;如果兩個位中任何一個為0,則結果為0。

示例程式碼

5 & 3;  // In binary: 101 & 011 = 001 (Result is 1)

輸出

1
按位與
a b a&b
0 0 0
0 1 0
1 0 0
1 1 1


按位或(|)

此運算子逐位比較數字。如果任何一個位為1,則結果為1;如果兩個位都為0,則結果為0。

示例程式碼

5 | 3;  // In binary: 101 | 011 = 111 (Result is 7)

輸出

7
按位或
a b a|b
0 0 0
0 1 1
1 0 1
1 1 1


按位異或(^)

此運算子逐位比較兩個數字。如果兩個位都為1或都為0,則結果為0;如果它們不同,則結果為1。

示例程式碼

5 ^ 3;  // In binary: 101 ^ 011 = 110 (Result is 6)

輸出

6
按位異或
a b a^b
0 0 0
0 1 1
1 0 1
1 1 0

左移

如果值左移一次,則其值加倍。就像我們每次左移都將數字乘以2一樣。

例如,a = 10,則a<<1 = 20

右移

如果變數的值右移一次,則其值變為原始值的一半。這與左移相反,就像我們每次右移都將數字除以2一樣。

例如,a = 10,則a>>1 = 5

按位取反

它將所有1轉換為0,將所有0轉換為1。

例如,a = 5,則~a=2 [僅當考慮4位時]。

以下是另一個位運算子的C程式示例:

#include<stdio.h>
void main (){
   int a= 20, b = 10,c=10;
   printf (" %d", a<<1);
   printf (" %d", b>>1);
   printf (" %d", ~c);
}

輸出

執行上述程式時,將產生以下結果:

40
5
11

帶符號

按位取反 = - [給定數字 + 1]

例如,~10 = - [10+1] = -11

~-10 = - [-10+1] = 9

無符號

按位取反 = [65535 – 給定數字]

條件運算子(?:)

條件運算子,也稱為三元運算子,是在程式設計中做出決策的一種簡單易行的方法。它允許我們根據特定條件從兩個選項中選擇一個值。

三元運算子的語法如下:

exp1? exp2: exp3

如果exp1為真,則計算exp2。否則,計算exp3。或者以if-else的形式表示。

if (exp1)
   exp2;
else
   exp3;

以下是條件運算子的C程式示例:

#include<stdio.h>
void main (){
   int z;
   z = (5>3) ? 1:0;
   printf ("%d",z);
}

輸出

執行上述程式時,將產生以下結果:

特殊運算子

一些特殊運算子包括逗號、取地址符(&)、sizeof運算子。

  • 逗號 ( , ) − 用於分隔變數。例如:a=10, b=20
  • 地址 (&) − 獲取變數的地址。
  • sizeof ( ) − 用於獲取變數資料型別的大小(以位元組為單位)。

以下是 C 語言特殊運算的程式示例:

#include <stdio.h>

int main() {
    int a = 10;
    float b = 20;

    printf("a = %d, b = %.1f
", a, b); printf("a address = %p
", (void*)&a); printf("b address = %p
", (void*)&b); printf("a size = %ld
", sizeof(a)); printf("b size = %ld
", sizeof(b)); return 0; }

輸出

執行上述程式時,將產生以下結果:

a=10 b=20.00
Address of a =1 2 3 4
Address of b = 5 6 7 8 Only for this example
Size of a = 4 bytes
Size of b = 4 bytes

更新於: 2024年11月12日

瀏覽量 12K+

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.