逻辑&&运算符

时间:2020-09-01 15:26:08

标签: c if-statement conditional-statements logical-operators logical-and

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。

3 个答案:

答案 0 :(得分:3)

在您的代码中

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

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

任何非零值都将作为 TRUTHY

答案 1 :(得分:2)

根据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);
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

答案 2 :(得分:0)

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

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

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