首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这是别人问过的一个有关问题,小弟我看了他们的回帖还是不懂

2012-04-01 
这是别人问过的一个问题,我看了他们的回帖还是不懂,代码1:void main(){unsigned a6int b-20if(a+b0)p

这是别人问过的一个问题,我看了他们的回帖还是不懂,
代码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、默认类型转换,当把值传给指定值的时候,会默认转换为指定值的类型
[解决办法]
我也领教了
[解决办法]
看了这个帖子我才明白

热点排行