关于C语言中逻辑运算符的一个非常简单的问题



我有一个关于C语言的问题。C中有逻辑运算符,如&|。我在这个代码中使用了它:

#include <stdio.h>
int main()
{
printf("%d",(1>2)||(2==2);
printf("%d",(1>2)|(2==2);
}

我知道为什么打印的值是1,但我不知道为什么编译器没有出错。

逻辑运算符的数量是一个或两个,这不存在问题吗?(例如:||,|得到相同的值(

关于打印函数中使用的逻辑运算符的数量,有什么规则吗?

您没有指定编译器引发的错误,但每个printf命令都缺少一个括号:

#include <stdio.h>
int main()
{
printf("%d",(1>2)||(2==2));
printf("%d",(1>2)|(2==2));
}

在C中,x | yy的相应位对x的每个位执行单独的逻辑"或"运算,而x || y对整个值执行逻辑"或"运算:如果两个值都为零,则结果为零,如果xy中的一个为非零,则为一。

例如,如果x的比特是0110 0111,而y的比特是0011 0001,则x | y的比特是011 0111,并且x || y是1。

在代码中,1>2产生值0,2==2产生值1。对于这些值,0 | 1产生1(因为位与00…01进行00…00或运算,产生00…01,即1(,0 || 1产生1(由于其中一个操作数为非零,所以0 || 1产生1(。

这与它们是在printf调用中使用还是在其他地方使用无关。

最新更新