为什么输出正确?

zhuywei123 2011-05-03 09:25:59
main()
{
unsigned int a = -1;
printf("%d\n",a);
return 0;
}
为什么输出正确?
...全文
238 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
RiweiChen 2011-05-05
  • 打赏
  • 举报
回复
原来是这回事。。。
xiamoamao 2011-05-05
  • 打赏
  • 举报
回复
不管是什么类型,-1在内存中存储为0xffffffff,用%d输出,则按照int类型读取这个0xffffffff,就是-1(最高为为1,故而是负数,-1的补码);而如果用%u输出,则按照unsigned int类型读取,无符号,故而直接转换成十进制,0xffffffff的十进制是65535,所以,输出就是65535.
wizard_tiger 2011-05-04
  • 打赏
  • 举报
回复
%d是按int型输出,
%u是按unsigned int型输出。
xmu_才盛 2011-05-04
  • 打赏
  • 举报
回复
因为内存存储的是一样的。。
不管有没有符号,a 里面存储的就是 0xffffffff, 给 %d打印, 就是按照有符号的打印 ,就是-1,
%u打印,就是无符号的数值, 65535
longdenghua 2011-05-04
  • 打赏
  • 举报
回复
还真没注意这方面,学习了
wutao0596 2011-05-03
  • 打赏
  • 举报
回复
每次看到printf("%d\n",a);,我都很郁闷
李亚超 2011-05-03
  • 打赏
  • 举报
回复

++++++++++++
[Quote=引用 2 楼 hnuqinhuan 的回复:]

C/C++ code

#include <stdio.h>
int main()
{
unsigned int a = -1;
printf("%u\n",a);//这样的输出就是错误的
printf("%d\n",a);
return 0;
}
//理解数组在计算机内部是按照二进制存储的
//unsigned int 和int都是32位的
//在C++中u……
[/Quote]
無_1024 2011-05-03
  • 打赏
  • 举报
回复

#include <stdio.h>
int main()
{
unsigned int a = -1;
printf("%u\n",a);//这样的输出就是错误的
printf("%d\n",a);
return 0;
}
//理解数组在计算机内部是按照二进制存储的
//unsigned int 和int都是32位的
//在C++中unsigned int 的范围是 0 ~ 4297949295
//int的范围是 -2147483648 2147483647
//-1的存储方式是 10000000 00000000 00000000 00000001
//而int的却别在于吧最高位作为符号位了
//unsigned int最高位作为数字位处理的
//这样在输出的时候就是吧二进制转换为 int 或者unsigned int
//只需要理解计算机是二进制的
無_1024 2011-05-03
  • 打赏
  • 举报
回复
强制转换了 unsigned int 是无符号的 然后再输出地时候%d格式化输出的函数强制类型转换

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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