#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
使用了逻辑或运算符||
,如果两个操作数中的任何一个都不等于0,则该运算符将产生1。
从C标准(6.5.14逻辑或运算符)
3 ||如果运算符之一比较,则运算符应产生1不等于0;否则,结果为0。结果的类型为int。
按位或运算符|
的写法是
c = a | b; // 0011 1101
如果您愿意这样写
c = a | | b; // 0011 1101
符号'|'
之间有空格,则编译器将发出错误。您不能对任何二进制运算符使用这种方式,因为这样的运算符期望运算符在运算符的左侧和右侧。
当然,如果您要写类似的例子
c = a + + b;
然后有第一个运算符+
是二进制加号,而第二个运算符+
是一元加号运算符。那就是没有两个连续的二元运算符+。
您不应该将逻辑运算符||
和&&
与按位运算符|
和&
混合使用。