在 C 语言中使用逻辑运算符解决问题

Solving a problem using logical operators in C programming language


#include <stdio.h>


void main()
{
 int a = 11, b = 5;
 if(a == 7 || 10){
     printf("True");
 }
 else
 printf("False");
}

这是我的问题,我在一个问题中看到它并被问到输出是什么。 我输入了错误但答案是正确的,我试图理解为什么因为 a 不等于其中任何一个并且它为真的条件是 a 至少等于其中一个

if语句中的表达式

if(a == 7 || 10){

等同于

if( ( a == 7 ) || ( 10 ) ){

由于 10 不等于 0,因此逻辑 OR 运算符的第二个操作数 || 始终计算为逻辑真。因此 if 语句中使用的整个表达式的结果为逻辑真。

事实上 a 不等于 7(由于它的初始化)那么上面的 if 语句等同于

if( 10 ){

这个:

if (a == 7 || 10)

是否 测试 a 是否等于 7 或 10。

如果两个操作数相等,则 == 运算符的计算结果为 1,否则为 0。如果至少有一个操作数不为零,则 || 运算符的计算结果为 1,否则为 0。

此外,相等运算符的优先级高于逻辑或运算符。所以上面的解析为:

if ((a == 7) || 10)

因此,如果 a==7 的计算结果为非零或 10 的计算结果为非零,则表达式为真。后者为真所以条件为真。

逻辑错误。您键入它的方式不会检查 a == 7 或 a == 10(如您所愿),而是仅检查 a == 7 和第二个条件 if (10) 是否始终为真。

修复实际上非常简单:

void main()
{
 int a = 11, b = 5;
 if(a == (7 || 10)){
     printf("True");
 }
 else
 printf("False");
}