问C语言unsigned int 和 int

jzc1983 2006-10-29 09:50:38
unsigned int a = 6;
int b = -20;

(a+b > 6) ? puts("> 6") : puts("<= 6");

为什么是a+b > 6?
...全文
437 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
louisming 2006-10-30
  • 打赏
  • 举报
回复
都答完了
抢不到分了#_#
lann64 2006-10-29
  • 打赏
  • 举报
回复
加之前把a强制转成int,或把结果强制转为int,可以得到结果是-14,就满足楼主的表达式要求了。
(int)a+b>6或(int)(a+b)>6.
lann64 2006-10-29
  • 打赏
  • 举报
回复
usigned int级别比int高,遇到两种不同类型数据运算时,级别低的要提升到级别高的.
int b (-20)提升到unsigned时,是4294967276(对于4字节int)。再加6,呵呵当然结果比6大。
yeknight 2006-10-29
  • 打赏
  • 举报
回复
隐式内型转换
morphymorphy 2006-10-29
  • 打赏
  • 举报
回复
-14的原因是%d

============

楼上说的对。。。
太不小心了。。
mu_yang 2006-10-29
  • 打赏
  • 举报
回复
但是这样不会转换
printf("%d",a+b); 案是-14
-------------------------------
也不是不会转换
-14的原因是%d

printf("%d",6+4294967276); 也会得-14
morphymorphy 2006-10-29
  • 打赏
  • 举报
回复
在做 a+b>6
b作了隐式类型转换。。成了unsigned int型数。。。

但是这样不会转换
printf("%d",a+b); 案是-14
f_acme 2006-10-29
  • 打赏
  • 举报
回复
unsigned int a = 6;
int b = -20;
cout<<(unsigned int)b<<endl;
cout<<a+b<<endl;
(a+b > 6) ? puts("> 6") : puts("<= 6");
----------
这样就可以明白了。
f_acme 2006-10-29
  • 打赏
  • 举报
回复
隐式类型转换,把b变为unsigned int是一个很大的数字来的,4294967276,那a+b当然大于6了。
nule 2006-10-29
  • 打赏
  • 举报
回复
a+b >6结果为0啊
这个程序输出是<=6吧

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧