【发布时间】:2019-06-01 09:49:16
【问题描述】:
我认为 ((1 ? (int)1 : (unsigned int)2) > -1) 的结果是 1 (true),但实际上它在 Visual Studio 2017 中是 0 (false)。
我认为(1 ? (int)1 : (unsigned int)2) 的值应该是(int)1,因为1 ? 为真,而1 > -1 为真。
不知道这个表达式最终结果为假的原因。
当我尝试像((int)(1 ? (int)1 : (unsigned int)2) > -1) 一样投射时,它会返回1 (true)。
signed int test = -1;
signed int si = 1;
unsigned int ui = 2;
printf("%d\n", ((1 ? si : ui) > test));
return 0;
我希望输出为1,但实际输出为0。
【问题讨论】:
-
(WHATEVER ? (int)1 : (double)42)的类型始终相同。更改WHATEVER时类型不会更改。见c99 6.5.15。 -
@manjy:这不是that 的副本。该问题及其最佳答案涉及二元运算符。首先,
? :不是二元运算符,并且无论其第一个操作数的值如何,最后两个操作数都不会组合在一个操作中。确实,当? :具有算术操作数时,通常的算术转换适用,但该问题并未说明这一点,因为它没有讨论? :运算符。 (此外,? :可能有非算术操作数。)
标签: c ternary-operator unsigned signed conditional-operator