数据类型在内存中的存储
数据类型简介
数据类型可大致分为以下四种:
1.整形
常见的的整形为int ,char,short,long,unsighed,sighed,及由这些类型组合构成的复杂类型,如unsigned char,signed long [int],unsigned int等等。
2.浮点数
浮点数分为单精度浮点数float和双精度浮点数double。
3.构造类型
构造类型包括数组类型,结构体类型struct,枚举类型enum,联合类型onion。
4.指针类型
常见的指针类型有int *,char *,float *,void *,long *等等。
5.空类型
用void表示空类型或无类型。
整形在内存中的存储
整形在内存中的存储要涉及到三个概念:原码,反码和补码。
1.原码
原码为一个十进制数直接转为二进制所得到的的二进制数。
2.反码
反码的求解需要分为两种情况:
(1)此数字为正数
正数的反码是原码本身。
(2)此数字为负数
负数的反码为原码符号位不变,将后面的数字一次取反所得到的数字。
3.补码
补码的求解任然分为两种情况:
(1)此数字为正数
正数的补码为原码本身。
(2)此数字为负数
负数的补码为反码+1所得到的数字。
注:正数的原码,反码和补码为同一个数字。
如10和-1
10的原码,反码和补码皆为0000 0000 0000 0000 0000 0000 0000 1010
-1的原码为1000 0000 0000 0000 0000 0000 0000 0001
-1的反码为1111 11111 1111 11111 1111 11111 1111 11110
-1的补码为1111 11111 1111 11111 1111 11111 1111 11111
在计算机中,整数的存储方式为存储此数字的补码。
在计算时,计算机直接调用数字的补码进行计算。
浮点数在内存中的存储
浮点数的存储相较于整数的存储较为复杂,在本文中,仅用32位下的单精度float进行解释。
单精度浮点数在内存中的存储是使用科学计数法,先将数字化为二进制数,再通过科学记数法将二进制数改为( - 1 ) ^ S * ( M + 1 ) * 2 ^ ( E - 127 )的形式进行存储。单精度浮点数的存储占用32个bit(4个字节),其中最高的一位为符号位S,后8位为指数E,剩下的23位为浮点数的有效数字M。
1.符号位S
当符号位为0时,表示此数字为负数;当符号位为1时,表示此数字为正数。
2.指数E
指数E为一个无符号整数unsigned,表示浮点数在存储时2的指数,E的数值越大,所代表的数字越大。
注:在数据存储时,当求得2的指数后,在存储时,E的值应为所求指数+127,同理,在取出数据时,应将E的值-127所得到的结果作为数据计算时真实的指数。目的是可以表示2的指数为负数的值。
3.有效数字M
有效数字为一个数字用科学计数法表示时,小数点后面的数字。
注:在数据存储时,需要将小数点前的1去掉,仅小数点后的数字;同理,在将数据取出时,需要将有效数字化为十进制后,在前面加上1和小数点。
特殊情况:
(1)当E全为0时,此浮点数表示±0,和接近0的很小的数字。
(2)当E全为1时,若有效数字全部为0,则表示±无穷大。
指针类型
指针作为变量,存放着所指向单元的地址,无论所指向的单元是什么类型,其指针在存储时,都是以4个字节的空间进行存储。