在 C 语言中,“&&”与“&”、“||”与“|”主要有以下区别:
一、逻辑运算符“&&”和“||”
“&&”是逻辑与运算符。
- 当且仅当两个操作数都为真时,整个表达式的结果为真。
- 例如:
int a = 5, b = 7; if (a > 0 && b > 0) { /* 执行某些操作 */ }
,在这个例子中,只有当a
大于 0 并且b
也大于 0 时,条件判断才为真,才会执行if
语句块中的代码。 - 逻辑与运算符具有短路特性,即如果第一个操作数为假,就不会再判断第二个操作数,直接得出整个表达式为假的结果。
“||”是逻辑或运算符。
- 只要两个操作数中有一个为真,整个表达式的结果就为真。
- 例如:
int c = -2, d = 0; if (c > 0 || d > 0) { /* 执行某些操作 */ }
,这里只要c
或者d
中有一个大于 0,条件判断就为真,就会执行if
语句块中的代码。 - 逻辑或运算符也具有短路特性,即如果第一个操作数为真,就不会再判断第二个操作数,直接得出整个表达式为真的结果。
二、位运算符“&”和“|”
“&”是按位与运算符。
- 对两个操作数的每一位进行与运算。即只有当两个对应位都为 1 时,结果位才为 1,否则为 0。
- 例如:
int e = 5; // 二进制为 0101
,int f = 3; // 二进制为 0011
,int g = e & f;
,则g
的值为 1(二进制为 0001)。 - 按位与运算符不具有短路特性,会对两个操作数的每一位都进行计算。
“|”是按位或运算符。
- 对两个操作数的每一位进行或运算。即只要两个对应位中有一个为 1,结果位就为 1,只有当两个对应位都为 0 时,结果位才为 0。
- 例如:
int h = 5; // 二进制为 0101
,int i = 3; // 二进制为 0011
,int j = h | i;
,则j
的值为 7(二进制为 0111)。 - 按位或运算符同样不具有短路特性,会对两个操作数的每一位都进行计算。