unsigned int a=6;int b=-20;int c;(a+b>6)?(c=1):(c=0);printf("%d %d",a+b,c);为何a+b是-14而c却为1?

2024-12-20 12:06:47
推荐回答(2个)
回答1:

因为在三元操作符中,a+b,自动转化成unsigned int 类型,负数20的补码是一个很大的数,加上6以后也不会溢出,所以两者相加是一个很大的数,所以C是1,但是%d是带符号的输出。无符号的输出是%u。

回答2:

因为a是个unsigned ,所以a+b的结果也是个unsigned
a+b的结果并不是-14而是4294967282(32位情况下), 显示-14是因为你用%d输出a+b了,正确的输出格式是%u