如果在两个数字之间使用了两次按位或运算符。那将如何运作?
If bitwise OR operator is used twice between two number. How will that work?
#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 The || operator shall yield 1 if either of its operands compare
unequal to 0; otherwise, it yields 0. The result has type int.
按位包含或运算符|
写成
c = a | b; // 0011 1101
如果你会这样写
c = a | | b;
符号之间有空格 '|'
则编译器会报错。您不能以这种方式使用任何二元运算符,因为这样的运算符需要运算符的左侧和右侧的操作数。
当然,如果你会这样写,比如
c = a + + b;
那么就有第一个运算符+
是二元加号,第二个运算符+
是一元加号运算符。即没有两个连续的二元运算符+
.
您不应将逻辑运算符 ||
和 &&
与按位运算符 |
和 &
混合使用。
#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 The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.
按位包含或运算符|
写成
c = a | b; // 0011 1101
如果你会这样写
c = a | | b;
符号之间有空格 '|'
则编译器会报错。您不能以这种方式使用任何二元运算符,因为这样的运算符需要运算符的左侧和右侧的操作数。
当然,如果你会这样写,比如
c = a + + b;
那么就有第一个运算符+
是二元加号,第二个运算符+
是一元加号运算符。即没有两个连续的二元运算符+
.
您不应将逻辑运算符 ||
和 &&
与按位运算符 |
和 &
混合使用。