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

C语言中逻辑运算符的一个非常简单的问题,c,logical-operators,C,Logical Operators,我有一个关于C语言的问题。C语言中有逻辑运算符,如&和|。 我在代码中使用了它: #include <stdio.h> int main() { printf("%d",(1>2)||(2==2); printf("%d",(1>2)|(2==2); } #包括 int main() { printf(“%d”,(1>2)| |(2==2); printf(“%d”,(1>2)|(2==2); } 我知道为什么打印值是1,但我不知道为什么编译器没有出错

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

#include <stdio.h>
int main()
{
    printf("%d",(1>2)||(2==2);
    printf("%d",(1>2)|(2==2);
}
#包括
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));
}
#包括
int main()
{
printf(“%d”,(1>2)| |(2==2));
printf(“%d”,(1>2)|(2==2));
}

在C中,
x | y
x
的每一位执行一个单独的逻辑“或”操作,并使用
y
的对应位,而
x | y
执行一个逻辑“或”操作对整个值的操作:如果两个值都为零,则结果为零;如果
x
y
非零,则结果为一

例如,如果
x
的位为0110 0111,
y
的位为0011 0001,则
x | y
的位为0111 0111,
x | | y
的位为1

在代码中,
1>2
生成值0,
2==2
生成值1。对于这些值,
0 | 1
生成1(因为位是00…00或00…01,00…01生成00…01,这是1),
0 | 1
生成1(因为其中一个操作数是非零的,所以
0 | 1
生成1)


这与它们是否用于
printf
调用或其他地方无关。

欢迎这样做。我假设你不知道你得到的输出是什么。你弄乱了逻辑运算符和按位运算符。你可以重温你最喜欢的C教程或教科书,查找这些基础知识。
&
都是按位运算符与逻辑运算符
&&
| |
完全不同。此外,您发布的代码中的括号是不平衡的,这就是它无法编译的原因,因此您可能没有使用您发布的代码。