这是在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。 为什么使用'?:'运算符时会有所不同?
答案 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
的结果值完全不受?:
运算符的影响。