【问题标题】:if(a%b) //what it means?if(a%b) //什么意思?
【发布时间】:2021-06-01 20:10:55
【问题描述】:
// take a=4 and b=2;

if(a%b)
  cout<<"true";
else
  cout<<"false";

程序输出false。我有点困惑,因为if 条件只传递真值,if(a%b) 表示a%b==0;那为什么if语句没有通过呢?

【问题讨论】:

  • 以一种详细的方式,这是测试“a 是否不能完全被 b 整除”。至于这是如何工作的,以及 % 指的是答案。

标签: c++ if-statement c++17 c++14 implicit-conversion


【解决方案1】:

任何不等于0的表达式都会在if语句中转换为逻辑真。

因此在这个 if 语句中

if(a%b)

表达式a % b(当a等于4,b等于2时)计算结果为0。所以if语句的条件等于false。

那个 if语句是否等价于

if( a%b != 0 )

条件

if(a%b)

if(a%b == 0 )

是两个不同的条件,意思相反。

来自 C++ 14 标准(4.12 布尔转换)

1 算术、无范围枚举、指针或指针的纯右值 to 成员类型可以转换为 bool 类型的纯右值。 零 值、空指针值或空成员指针值被转换 为假;任何其他值都将转换为 true。 对于 直接初始化 (8.5),std::nullptr_t 类型的纯右值可以是 转换为 bool 类型的纯右值;结果是假的。

【讨论】:

    【解决方案2】:

    if 条件需要一个布尔语句。 a%b 这里变成 0(因为 4 % 2 等于 0)。在 c/c++ 中,0 被认为是假的,非零被认为是真。这就是为什么,它给出了结果。

    【讨论】:

      【解决方案3】:

      【讨论】:

      • (4 % 2) 计算结果为 0,而不是 2。不确定这是否是您在声明中的意思。
      • 对不起,4%2==0 和 4/2==2,除法没有余数。 (youtube.com/watch?v=8pV7DuzODik)
      【解决方案4】:

      if(a%b) 不代表a%b==0

      a%b,其中a 为 4,b 为 2,计算结果为 0

      因此,您的if 语句为if(0),而0 被解释为false

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 2013-12-16
        • 2022-11-10
        • 2014-02-09
        • 2012-06-14
        • 2018-08-06
        • 1970-01-01
        相关资源
        最近更新 更多