C语言数字的存储

来源:百度知道 编辑:UC知道 时间:2024/05/09 15:08:11
有一题:
main()
{unsigned a=32768;
printf("a=%d\n",a);
}
输出的值是a=-32768
我想问的是数字是怎么存储的,有人和我说是什么先取反码再取补码存储的.那么怎么看这个数的符号呢?
还有就是在2个字节的2进制中有符号的32768是什么样的啊 ?(就是1和0组成的那个)那个负数又是什么样呢啊?比如-32768
先谢谢了,如果很好我会再给你10分的嘿嘿~~~~
如果象3楼的说的那么为什么2位的数取值是-32768~32767而不是
-32767~32767.那个负的32768是怎么表示的?
储存和用2进制表示一样吗?

简单一点吧:char 表示8位,每半个字节代表一个完整数字,那么8位就是FF
十进制是255,二进制是:11111111

他们说的是没错,首先看看在32位系统里面,无符号整型数表示正整数范围要比有符号正整数大出一倍,unsigned int 0~65535 ,int -32768~32767
然后,十进制的127,二进制是01111111,当每一位取反再补码就是10000001
可以看出,正整数的最高位是符号位,那么一个8位的二进制最大是01111111换算成十进制就是127,而负数的最高符号位为1,那么得出的结果就是-127
负数在二进制里的表示,就是看符号扩展位来获得。

不同的计算机各种类型位数是不一样,可以通过如下代码获得相关位制信息
#include <stdio.h>
int main()
{
printf("%d\n",sizeof(unsigned char));
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(short int));
printf("%d\n",sizeof(unsigned int));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long int));
printf("%d\n",sizeof(unsigned long int));

return 0;
}
了解到计算机的存储位信息,可以更准确的让你在程序中选择合适的数据类型来处理程序中的数值

十进制32768的二进制是:00000000000000001000000000000000
然后换算成负的二进制: 11111111111111111000000000000000
结果就是