这是别人问过的一个问题,我看了他们的回帖还是不懂,
代码1:void main()
{
unsigned a=6;
int b=-20;
if(a+b>0)
printf(">0");
else
printf("<=0");
}
代码2:void main()
{
unsigned a=6;
int b=-20;
int c=a+b;
if(c>0)
printf(">0");
else
printf("<=0");
}
前者输出>0,后者输出<0,为什么?
这是别人问过的一个问题,我看了他们的回帖还是不懂,
有人解释下吗,我是新手啊!别讲得太高深
[解决办法]
前者a+b会自动提升为无符号的数,-14是一个很大的无符号的数,和0比较当然很大了
后者被强转为了int c类型,所以变成有符号的了,-14有符号就比0小了
[解决办法]
unsigned int 和 int 运算会把 int 转换成 unsigned int.
所以 a + b 的结果默认是 unsigned int 的, 而无符号数是永远不会 < 0 的.
[解决办法]
1、需要清楚 unsigned 的定义,只有正值,赋值为负的会取反操作
2、默认类型转换,当把值传给指定值的时候,会默认转换为指定值的类型
[解决办法]
我也领教了
[解决办法]
看了这个帖子我才明白