C语言无符号数和有符号数的转换?

lookupheaven 2012-01-18 10:33:13
代码如下:
#include<stdio.h>
int main(void)
{
int len = -4;
unsigned len2 = 5;

if(len - len2 >= 0)
printf("%d\n", len * len2);
else
printf("0\n");

return 0;
}


输出:
-20
请按任意键继续. . .

这是神马情况?
...全文
423 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lookupheaven 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 czh3642210 的回复:]

C/C++ code
if(len - len2 >= 0)
printf("%u\n", len * len2);//你应该用%u打印,而不是用%d打印
[/Quote]
你说的对,汗啊
面包大师 2012-01-18
  • 打赏
  • 举报
回复
len - len2在这儿运算的时候已经转换成了无符号的了吧,所以这个是len - len2 >= 0是成立的
TechStone 2012-01-18
  • 打赏
  • 举报
回复
LINUX下GCC4.4.3 表示输出为 -20, LZ你这个结果怎么看也是有问题的吧。
面包大师 2012-01-18
  • 打赏
  • 举报
回复
你在运算的时候len * len2,已经从有符号向无符号转换了,但是你打印的时候出了问题
面包大师 2012-01-18
  • 打赏
  • 举报
回复
    if(len - len2 >= 0)
printf("%u\n", len * len2);//你应该用%u打印,而不是用%d打印
Ever_lover 2012-01-18
  • 打赏
  • 举报
回复
不同类型运算会涉及到类型的提升或者转化,比如说 int a+char b 会把b转化撑int类型,而%d输出也是按照有符号数据输出的,具体就了解这么多了,也不知道对不对,希望有所帮助

69,336

社区成员

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

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