逻辑&&运算符

问题描述

if ((a % 5) && (a % 11))
  printf("The number %d is divisible by 5 and 11\n",a);
else
  printf("%d number is not divisible by 5 and 11\n",a);

如果我不在表达式中添加&&,那么逻辑== 0运算符将如何工作,如果没有余数,它将寻找商数吗?并且商将始终为非零项,因此程序将始终返回true。

解决方法

在您的代码中

 if ((a % 5) && (a % 11))

相同
 if ( ((a % 5) != 0)  && ((a % 11) != 0 ) )

任何非零值都将作为 TRUTHY

,

根据C标准(6.5.13逻辑AND运算符)

3如果&&运算符的两个操作数都比较,则应产生1 不等于0;否则,结果为0。结果的类型为int。

在if语句中使用的表达式中

if ((a % 5) && (a % 11))

如果每个操作数a % 5a % 11不等于0,则表达式的计算结果为逻辑真。那就是当a不能被5整除并且不能被11整除时,该表达式的计算结果为true,结果该语句中输出了错误的消息

printf("The number %d is divisible by 5 and 11\n",a);

要使输出正确,您应该按以下方式在if语句中更改表达式。请注意,您还需要在第二次调用printf时更改消息。

if ((a % 5 == 0) && (a % 11 == 0 ))
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    printf("The number %d is divisible by 5 and 11\n",a);
else
    printf("%d number is either not divisible by 5 or by 11\n",a);
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
,

@Saurav的答案最能说明您的问题。除此之外,如果您想要解决方案以防万一您不想添加== 0,那么您只需使用!(NOT)运算符即可:

if (!(a % 5) && !(a % 11))

现在,仅当两个表达式都具有零值(即没有余数-如数字divisible)时,它才会显示55