C语言算术运算隐式转换问题!

tjj5203 2012-01-09 04:56:43

#include <stdio.h>
int main()
{
unsigned int a;
char d;
unsigned int c;
d = -20;
a = 250;

c = a+d;

printf("%d",c);

getchar();

}

以上是测试代码,DEVCPP输出为230.

问题:
测试输出结果与本人理解的转换规则不符合。

PS:
http://www.hookcn.org/2011/01/implicit-conversions-of-usual.html
链接为网上找的转换规则,但是如果按照转换规则,那么
1、进行整型提升,char d——>int d
2、unsigned int 的类型>= int,所以int会转换成unsigned int。那么计算的结果应该不是230.

大家帮忙看看吧!谢了
...全文
178 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
黯然 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 czh3642210 的回复:]

但是你打印的时候用的%d打印的。。。所以又转换成了int
[/Quote]
++
tjj5203 2012-01-09
  • 打赏
  • 举报
回复
确实,我没考虑到溢出,2楼说的是对的!
面包大师 2012-01-09
  • 打赏
  • 举报
回复
PS:
你用%u打印就好了
nice_cxf 2012-01-09
  • 打赏
  • 举报
回复
的确是先进行整型提升,假定32位系统,那么d=0xfffffec
0x00000fa+0xfffffec,溢出后=0xe6没错啊
面包大师 2012-01-09
  • 打赏
  • 举报
回复
但是你打印的时候用的%d打印的。。。所以又转换成了int

69,373

社区成员

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

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