逍遙自在學C語言 | 邏輯運算子

知微之見發表於2023-04-06

前言

一、人物簡介

  • 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。

  • 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。

二、構成和表示方式

  • 邏輯運算子是用來比較和操作布林值的運算子
  • C語言中的邏輯運算子主要有3個,如下表所示
運算子 名稱 示例 描述
&& a && b 當a和b都為真時,返回真
|| a || b 只要a或者b,其中任何一個為真,返回真
! !a 如果a的條件為真,返回假
  • 邏輯運算子的兩邊可以是變數、數值 或 表示式

? 變數

a && b
a || b
!a

? 數值

5 && 3
20 || a
!0

? 表示式

a+b && c
a-b || c-a
!(a+c)

三、邏輯運算子的應用

1、運算結果

邏輯運算子的運算結果為0(假)或者1(真)

  • 當條件成立時結果為,條件不成立結果則為

1.1 與運算

  • 例項演示
#include <stdio.h>
int main() {
    printf("1 && 2 結果為%d\n", 1 && 2);
    printf("0 && 3 結果為%d\n", 0 && 3);
    printf("5 && 0 結果為%d\n", 5 && 0);
    printf("0 && 0 結果為%d\n", 0 && 0);
    return 0;
}
  • 執行結果

1.2 或運算

  • 例項演示
#include <stdio.h>
int main() {
    printf("1 || 2 結果為%d\n", 1 || 2);
    printf("0 || 3 結果為%d\n", 0 || 3);
    printf("5 || 0 結果為%d\n", 5 || 0);
    printf("0 || 0 結果為%d\n", 0 || 0);
    return 0;
}
  • 執行結果

1.3 非運算

  • 例項演示
#include <stdio.h>
int main() {
    printf("!2 結果為%d\n", !2);
   	printf("!0 結果為%d\n", !0);
    return 0;
}
  • 執行結果

!! ,將任何值轉換為布林值

  • !!可以將一個整數、字元或指標值轉換為一個布林值。

例如,下面的程式碼片段中,將字串轉換為布林值,並將其用於條件判斷:

#include <stdio.h>

int main()
{
    char *str = "hello";
    int bool_value = !!str;

    if(bool_value) 
    {
      printf("str is not null\n");
    } 
    else 
    {
      printf("str is null\n");
    }
	
    return 0;
}

  • 執行結果

由於hello是一個非空字串,所以!!將其轉換為1,if條件語句的條件將被認為是真,所以第一個printf語句將被執行。

反之,如果字串“str”為NULL,則!!將其轉換為0,if條件將被認為是假,第二個printf語句將被執行。

2、運算子巢狀

  • 邏輯運算子是允許巢狀使用的,運算的結果可以繼續作為邏輯運算子的一個引數

  • 例項演示

#include <stdio.h>
int main() {
    int a = !( (6 > 3) && (11 - 20) && (0 - 1) );
    int b = !( (5 + 4) && (7 - 8) && (3 < 2) );
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    return 0;
}
  • 執行結果

? 第一個巢狀表示式分析

  • 因為6 > 3的結果為111 - 20的結果為-9,所以(6 > 3) && (11 - 20) && (0 - 1)等價於1 && -1,結果為1
  • a = !(1),結果為0

?第二個巢狀表示式分析

  • 5 + 4的結果為17 - 8的結果為-1
  • 3 < 2的結果為0
  • 所以(5 + 4) && (7 - 8) && (3 < 2)等價於9 && 0,結果為0
  • a = !(0),結果為1

3、優先順序

  • 先來看這個例項
#include <stdio.h>
int main() {
    int a = !( 1 || -1 && 0 );
    printf("a = %d\n", a);
    return 0;
}

  • 那麼實際的執行結果如何呢?

  • 因為&& 的優先順序高於||,所以-1 && 0會被先運算,結果為0
  • 1 || -1 && 0等價於1 || 0,結果為1
  • a = !(1),結果為0

邏輯運算子的優先順序順序為 ∣∣ < && < !

有興趣的小夥伴可以參考上面的程式碼來驗證&&!的優先順序關係哦!

小結

透過本文的講解,我們學會了3種邏輯運算子的使用方法及優先順序關係,下一篇文章,我們將講解位運算子。

相關文章