黑马程序员技术交流社区

标题: 一个C语言的小问题 [打印本页]

作者: 大雕会飞    时间: 2015-11-17 23:03
标题: 一个C语言的小问题
#include <stdio.h>
main()
{
        unsigned int a;
        a=-5;
        printf("%d\n",a);
}
为什么运行结果是-5
把-5赋值给无符号整形a时  格式不是会自动转换吗?应该转成5啊?
换为%u之后运行结果是随机数。。
作者: cube川    时间: 2015-11-18 20:39
很神奇。。。我这也是一堆数字,可能a=-5的时候转换为int类型了吧
作者: yufang1993    时间: 2015-11-18 21:02
无符号意味着正数...........
作者: poxiao    时间: 2015-11-18 21:16
你用无符号数存储-5,在32位的int中存储的就是1111 1111 1111 1111 1111 1111 1111 1011,你用%d打印会按有符号数打印出来也就是-5,但是如果你按%u打印的话就会打印出4294967291,这是把上述的二进制码转换成整数的数值。不是存储的不对,是占位符影响了你打印的结果
作者: liury    时间: 2015-11-18 21:22
确定换为%u后每次结果不同?
作者: 红龙果    时间: 2015-11-18 21:41
printf("%d\n",a);%d表示有符号数。
作者: Tmac90301    时间: 2015-11-18 23:23
谁说的把-5转成无符号数就是直接去负号的?你要去学一下二进制的原码反码和补码.所有的整型数都是以补码形式存储的,最高位是符号位.-5的补码对应的无符号数,大概就接近整型数的极限,也就是你得到的那个一大串数
作者: mr.late    时间: 2015-11-19 22:14
3楼正解
作者: 能不能行    时间: 2015-11-20 21:27
学习一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2