在 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