【问题标题】:Logical && operators逻辑 && 运算符
【发布时间】:2020-12-20 18:00:43
【问题描述】:
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。

【问题讨论】:

  • 您为测试用例输入了哪些数字?
  • ISO C 2011, 6.5.13 #3: "&& 运算符如果两个操作数比较不等于 0 则返回 1;否则返回 0。结果类型为 int。 "
  • 你的表述有误。如果a%5 != 0 那么肯定a%11 也将是!= 0

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


【解决方案1】:

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

3 如果两个操作数比较,&& 运算符将产生 1 不等于0;否则,它产生 0。结果的类型为 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);
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      在您的代码中

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

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

      任何非零值都被视为真实

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-08
        • 2011-09-23
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多