弱弱的问一下,无符号整型的赋值问题,望高手帮忙解答

lqiang518 2013-01-10 07:53:21
#include <stdio.h>
int main()
{
unsigned short int a=-1;
printf("a=%d\n",a);
return 0;
}
输出结果为65535

#include <stdio.h>
int main()
{
unsigned int a=-1;
printf("a=%d\n",a);
return 0;
}
输出结果却为-1

为什么负数能赋值给无符号整型,两次的输出结果为什么有差异,求解,TKS


...全文
429 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_古怪 2013-01-10
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
用%u输出无符号整型。
+1
AnYidan 2013-01-10
  • 打赏
  • 举报
回复
没 区别 都按 d 格式输出
图灵狗 2013-01-10
  • 打赏
  • 举报
回复
用%u输出无符号整型。
abc41106 2013-01-10
  • 打赏
  • 举报
回复
1.有符号数会隐式转换成无符号数 2.printf打印无符号数要用%u,如果用%d的话,它会转换成有符号int short int是2个字节,32位系统int是4个字节 所以-1的二进制是 1000 0000 0000 0001 对应补码是 1111 1111 1111 1111 所以转换成无符号数便是65535 打印的时候转成int便成了: 0000 0000 0000 0000 1111 1111 1111 1111 还是65535 而int是4个字节 所以-1的二进制是 1000 0000 0000 0000 0000 0000 0000 0001 对应补码是 1111 1111 1111 1111 1111 1111 1111 1111 所以转换成无符号数就是4294967295 但是你用%d打印,它又变成了有符号数,即-1 你可以用%u试试
kndyc 2013-01-10
  • 打赏
  • 举报
回复
你是在32位机上编译的吧, unsigned short int是16位整型,%d是32位int型,a=-1就是0xffffffff,提升到int就是0x00000000ffffffff=65535,unsigned int a=-1是32位的,就是0xffffffffffffffff,输出%d就是-1

69,373

社区成员

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

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