#include <stdio.h>
int main()
{
int a = 60; // 0011 1100
int b = 13; // 0000 1101
int c = 0;
c = a || b;
printf("%d",c);
return 0;
}
我的代码的输出是 1。谁能解释一下这是如何工作的?
在此语句中
c = a || b; // 0011 1101
使用了逻辑 OR 运算符||
,如果其中一个操作数不等于 0,则生成 1。
来自 C 标准(6.5.14 逻辑 OR 运算符(
3 如果 || 运算符的任一操作数比较,则其应生成 1 不等于 0;否则,它产生 0。结果的类型为 int。
按位包含 OR 运算符|
的编写方式如下
c = a | b; // 0011 1101
如果你会写成
c = a | | b;
符号之间'|'
空格,则编译器将发出错误。您不能以这种方式使用任何二元运算符,因为此类运算符期望运算符的左侧和右侧都有操作数。
当然,如果你会写例如
c = a + + b;
然后是第一个运算符+
是二进制加号,第二个运算符+
是一元加号运算符。也就是说,没有两个连续的二进制运算符+
。
不应将逻辑运算符||
和&&
与按位运算符|
和&
混合使用。