逻辑 && 运算符

Logical && operators

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,逻辑运算符 && 将如何工作,如果没有余数,它会寻找商吗?并且商将始终是非零项,因此程序将始终 return true.

在你的代码中

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

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

任何 non-zero 值都被视为 TRUTHY.

的回答最能描述您的问题。除此之外,如果你想要一个解决方案,以防你不想添加 == 0,那么你可以简单地使用 ! (NOT) operator:

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

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

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

3 The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

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

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

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

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