|和||的區別,C語言|和||的區別詳解

2020-07-16 10:04:23
在 C 語言中,“||”是邏輯操作符(或),它的運算元是布林型,即只有“0”(表示 false)和“1”(表示 true)兩個數值。C 語言規定,在邏輯運算中,所有非 0 的數值都被看成 1 處理。

而“|”是位元運算符(或),其運算元是位序列。位序列可以是字元型、整型與長短整型等(通常情況下選擇無符號整型)。在位運算中,相應的位之間進行邏輯運算,因此,從邏輯上講,位運算過程包含多個邏輯運算過程。

下面通過一個範例來了解兩者之間的區別。
#include <stdio.h>
int main (void)
{
    unsigned int x = 0x1101;
    unsigned int y = 0x1100;
    /*邏輯操作*/
    printf("sizeof(x || y): %dn", sizeof(x || y));
    if(x||y)
    {
        printf("x || y : %d(True) n", x||y);
    }
    else
    {
        printf("x || y : %d(False) n", x||y);
    }
    /*位元運算*/
    printf("sizeof(x | y): %dn", sizeof(x | y));
    printf("x | y : %x n", x|y);
    return 0;
}
因為變數 x 與變數 y 都不為 0,所以執行語句 if(x||y) 返回 1。而當執行 x|y(即 1101|1100)時,相應的位之間逐一地進行邏輯運算(或),因此所得到的結果為 1101。

程式執行結果為:
sizeof(x || y): 4
x || y : 1(True)
sizeof(x | y): 4
x | y : 1101