【问题标题】:how will this statement execute conditional operation in c?该语句将如何在c中执行条件操作?
【发布时间】:2018-12-28 12:03:46
【问题描述】:

我有条件运算符的语句,但我不知道它是如何工作的。 有两个问题:

问题 1:以下语句会做什么:

 quotient=(b==0)?0:(a/b) \\ here a,b,quotient is integer

问题2:前面的语句可以写成下面这样吗?

 quotient=(b)?(a/b):0;

现在我的问题是:

问题:1 ::我们不知道 b 的值,那么我们如何检查这个条件(b==0)

问题 2:: (b) 表示什么?

【问题讨论】:

  • 变量b 计算为自身,如果非零计算为真,否则为假。
  • 注意布尔运算符它们自己的结果,包括==,是int - 1代表true和@ 987654327@ 为假。
  • @AnttiHaapala: "布尔运算符" -> "关系运算符",好吗?
  • 其实==是相等运算符,不是关系运算符...
  • @AnttiHaapala;触摸。

标签: c operators conditional-operator


【解决方案1】:

C 三元条件运算符中的条件检查是与非零的隐式比较。

换句话说

quotient = b ? a / b: 0;

一样
quotient = b != 0 ?  a / b : 0;

还是荒谬的

quotient = (b != 0) != 0 ?  a / b : 0;

这在整个 C 中是一致的,例如在iffor 停止条件、while&&|| 等中。

【讨论】:

    【解决方案2】:

    如果你尝试

    int b = 0;
    if (b) {
       printf("Hello World");
    }
    

    不打印任何东西:

    int b = 1;
    if (b) {
        printf("Hello World");
    }
    

    打印Hello World。为什么 ?因为0为假,1为真。

    如果你使用quotient=(b)?(a/b):0;,它会被解释为is b true ?,或者换句话说is b evaluated to 1(而1 is true and 0 is false

    【讨论】:

    • 不仅仅是10以外的任何数字都是true。你可能应该提到这一点。因为在 OP 的情况下,b 可以是任何数字。
    【解决方案3】:

    C 最初没有布尔类型。条件只是 C 中的 int 值。0 为假,任何其他值都是真值。如果b的类型是int,或者它可以隐式转换为int,那么(b) ? foo : bar(b == 0) ? bar : foo做同样的事情。 (但是,b==0 将评估为 1 或 0,而 b 本身可能具有其他非零值,if? 认为是真实的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 2015-03-20
      相关资源
      最近更新 更多