C语言中无符号数和有符号数相加问题

时间:2023-02-07 01:21:18
话说有符号数和无符号数进行比较运算时(==,<,>,<=,>=),有符号数隐式转换成了无符号数。
看下面这个程序,我还有是有问题。。
1.有符号和无符号相加肯定不存在有符号数隐式转换成了无符号数的问题吗?
2.(a+b)的结果是有符号还是无符号,为什么和有无符号比较结果都一样?

int main(void)
{
unsigned int a = 6;
signed int b = -20;
signed int c = 6;

printf("%d\n",a+b);
(a+b) > a ? puts(">6") : puts("<=6");
(a+b) > c ? puts(">6") : puts("<=6");

return 0;
}

结果

-14
>6
>6

2 个解决方案

#1


1. 相加也会把有符号数转换成无符号数. 只是你用 printf("%d") 输出的时候又会把它转换成有符号数而已.
2. 既然存在转换, a + b > a 和 a + b > c 就很明显, 不存在为什么的疑问了吧?

#2


总结了一下
http://blog.csdn.net/lgbxyz/article/details/9151853

#1


1. 相加也会把有符号数转换成无符号数. 只是你用 printf("%d") 输出的时候又会把它转换成有符号数而已.
2. 既然存在转换, a + b > a 和 a + b > c 就很明显, 不存在为什么的疑问了吧?

#2


总结了一下
http://blog.csdn.net/lgbxyz/article/details/9151853