#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 ) ){
由于CCD_ 1不等于CCD_ 2,则逻辑OR运算符CCD_。所以if语句中使用的整个表达式都有一个逻辑true的结果。
事实上,由于a
不等于7
(由于其初始化(,则上述if语句等效于
if( 10 ){
这:
if (a == 7 || 10)
是否测试a
是否等于7或10。
如果两个操作数相等,==
运算符的计算结果将为1,否则为0。如果至少有一个操作数为非零,则||
运算符的计算结果为1,否则为0。
此外,相等运算符的优先级高于逻辑OR运算符。所以上面解析为:
if ((a == 7) || 10)
因此,如果a==7
的计算结果为非零或10
0的计算结果非零,则表达式将为true。后者是真的,所以条件是真的。
这是一个逻辑错误。键入它的方式不是检查a==7还是a==10(如您所愿(,而是只检查a==7和第二个条件if(10(是否始终为真。
实际上,修复非常简单:
void main()
{
int a = 11, b = 5;
if(a == (7 || 10)){
printf("True");
}
else
printf("False");
}