这个语句将如何在c中执行条件操作?

how will this statement execute conditional operation in c?

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

问题 1:下面的语句会做什么:

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

问题二:前面的语句可以这样写吗?

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

现在我的问题是:

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

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

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

换句话说

quotient = b ? a / b: 0;

相同
quotient = b != 0 ?  a / b : 0;

还是荒谬的

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

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

如果你尝试

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

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