黑马程序员技术交流社区
标题:
一个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