A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大雕会飞 中级黑马   /  2015-11-17 23:03  /  1266 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#include <stdio.h>
main()
{
        unsigned int a;
        a=-5;
        printf("%d\n",a);
}
为什么运行结果是-5
把-5赋值给无符号整形a时  格式不是会自动转换吗?应该转成5啊?
换为%u之后运行结果是随机数。。

8 个回复

倒序浏览
很神奇。。。我这也是一堆数字,可能a=-5的时候转换为int类型了吧
回复 使用道具 举报
无符号意味着正数...........
回复 使用道具 举报
你用无符号数存储-5,在32位的int中存储的就是1111 1111 1111 1111 1111 1111 1111 1011,你用%d打印会按有符号数打印出来也就是-5,但是如果你按%u打印的话就会打印出4294967291,这是把上述的二进制码转换成整数的数值。不是存储的不对,是占位符影响了你打印的结果
回复 使用道具 举报 1 0
确定换为%u后每次结果不同?
回复 使用道具 举报
printf("%d\n",a);%d表示有符号数。
回复 使用道具 举报
谁说的把-5转成无符号数就是直接去负号的?你要去学一下二进制的原码反码和补码.所有的整型数都是以补码形式存储的,最高位是符号位.-5的补码对应的无符号数,大概就接近整型数的极限,也就是你得到的那个一大串数
回复 使用道具 举报
mr.late 中级黑马 2015-11-19 22:14:06
8#
3楼正解
回复 使用道具 举报
学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马