b为什么得到值100?

时间:2019-02-22 00:22:36

标签: c

这是在C:

#include <stdio.h>

int main()
{
    int a=100,b;
    b= (a>100)?a++:a--;
    printf("%d %d\n",a,b);
}

b分配了值100,但是尝试

int main()
{
    int a=100,b;
    b= (a>100)
    printf("%d %d\n",a,b);
}

b在返回true时打印值1。 为什么使用'?:'运算符时会有所不同?

3 个答案:

答案 0 :(得分:4)

在第一种情况下,

b= (a>100)?a++:a--;

可以简单地认为如下:

if(a>100) {
   b = a;
   a = a + 1;
}
else {
   b = a;
   a = a - 1;
}

在第二种情况下

b= (a>100)

布尔操作a>100返回false,它等于0。因此b的值为0,而不是1。

答案 1 :(得分:3)

?:运算符对:之前的事物或:之后的事物进行评估以确定其评估结果。在这种情况下,(a>100)为假,因此其值为a--。由于这是后递减,因此递减会在提供其值之后发生,因此它将求值为100递减之前的b值。因此b获得此值。

因此,在第一个示例中,评估a--的结果被分配给b。在第二个示例中,将评估(a>100)的结果分配给b

答案 2 :(得分:1)

根据定义,a--a++均评估为a old 原始值。这就是postfix运算符的行为。 a的原始值为100

因此,不管您的?:表现如何,b都被分配了a的原始值100。从这个意义上说,b的结果值完全不受?:运算符的影响。