C语言 unsigned正负数问题

小弟编译以下C语言代码:
#include <stdio.h>
int main()
{
unsigned int k=-5;
printf("%u", k);
getchar();
return 0;
}
运行以后,为什么得出的结果不是5,而是4294967291,很是不解,求教!
用gcc编译

因为-5的二进制(32位)是 11111111111111111111111111111011
如果使用无符号十进制(最高位不作符号位,也作有效数位)的话
11111111111111111111111111111011 转为十进制就是 4294967291
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-05
-5需要转为二进制啊,转换后为11111111 11111111 11111111 11111011,他的unsigned值就是一个很大的数追问

感谢你的回答,我已经明白了。

追答

嗯,不客气

第2个回答  2015-08-05
你输出就的数就是2的32次方减5,unsigned类型就是无符号数整形数,自然是没有-5的,输出的数是-5的补码,这里是int ,占四个字节,-5本来是 1000 0000 0000 0000 0000 0000 0000 0101 符号位不变其他位置取反再加一,就得到了上面那个数。追问

感谢你的回答,我已经明白了。

相似回答