【发布时间】:2016-02-12 12:07:58
【问题描述】:
谁能给我解释一下
printf("%d", -2<2u?1:-1);
打印出'-1'。我假设正在进行某种隐式转换,但我似乎无法理解它。
【问题讨论】:
-
启用所有警告:“警告 C4308:负整数常量转换为无符号类型” 解释了该问题。
-
现在解释为什么这段代码
if( (-2 < 2u ? 1u : -1) > 0) { printf("-1 > 0"); }打印-1 > 0:) -
@Lundin 你的意思是This?
-
@Michi 显然你不能用
-Werrorset 编译有问题的代码:) -
@Michi 我所做的细微调整是采用条件运算符,它始终将结果评估为第三个操作数 (-1),然后使第二个操作数无符号 (1u)。即使永远不会使用第二个操作数,但 ?: 运算符的第二个和第三个操作数之间存在隐式平衡,这在这种情况下会导致错误的结果。结论是
?:操作符要谨慎使用。
标签: c implicit-conversion unsigned