当前位置: 首页 > >

数据的表示与存储

发布时间:

1. 前言

??一直打算写些什么,今天终于迈出了第一步。
??本文讨论了数据在计算机中的表现和存储形式。


2.符号数

??符号数是数值在计算机中的二进制表示形式,分为有符号数和无符号数。
??有符号数:机器字长中的最高位被称为符号位,0代表正数,1代表负数。
??无符号数:机器字长中的所有二进制位都用于表示数值,也就是不存在负数。
??在JAVA语言中,不存在无符号数。


3.整型数据的原码、反码与补码

??3.1 正整型
??对于正整数而言,它的原码、反码与补码相同。
??以占1个字节的byte型数据为例:
??2的原码/反码/补码皆为:0000,0010
?? 3.2 负整型
??首位的1代表负数,例如:
??-2的原码为:1000,0010
??反码(符号位不变,其余位置取反):1111,1101
??补码(+1):1111,1110


4.补码的作用

??采用补码的方式,计算机可以将减法运算转化为加法运算。
??例如:





110+210=0000,0001补+0000,0010补=0000,0011补=0000,0011反=0000,0011原=3




1



10




+



2



10




=


0000








0001








+


0000


,



0010








=


0000


,



0011








=


0000








0011








=


0000








0011








=


3









?110+210=1111,1111补+0000,0010补=0000,0001补=0000,0001反=0000,0001原=1



?



1



10




+



2



10




=


1111


,



1111








+


0000


,



0010








=


0000


,



0001








=


0000








0001








=


0000








0001








=


1




5.浮点型数据

存储形式:

浮点型的以IEEE浮点标准进行存储:将特定长度的连续字节的所有二进制位分割为特定宽度的符号域,指数域和尾数域三个域,分别用于表示给定二进制浮点数中的符号(s),指数(E)和尾数(M)。





V=(?1)s×M×2E



V


=


(


?


1



)


s



×


M


×



2


E




以十进制数-123.456为例,

?123.456=?1.23456×102



?


123.456


=


?


1.23456


×



10


2


,1.23456为尾数,2为指数,符号位为1。


符号位 阶码 尾数 长度
float 1 8 23 32
double 1 11 52 64

示例:以float型数据5.2f为例


5=0101
0.2*2=0.4*2=0.8*2=0.6*2=0.2*2=0.4......
0 0 1 1 0

5的二进制表示为0101;
0.2的二进制表示(*2取余顺排):0.00110011……
此处,0.2的二进制表示为无限循环小数,所以5.2f在计算机中无法实现精确表示。
由于float的尾数为23位,所以5.2f的二进制表示为101.0011,0011,0011,0011,0011;用科学计数法表示为



1.0100,1100,1100,1100,1100,11×22



1.0100


,


1100


,


1100


,


1100


,


1100


,


11


×



2


2




规定小数点左侧只能为1,并且1可以省略。所以,末尾再添加一位(根据该位置原有的数据填写),变为



.0100,1100,1100,1100,1100,110×22



.0100


,


1100


,


1100


,


1100


,


1100


,


110


×



2


2




所以5.2f的尾数为0100,1100,1100,1100,1100,110。
指数为2,阶码占8位,且有符号。根据IEEE标准,可以得出




float的偏置量Bias=2k?1?1=28?1?1=127阶码e=指数E+偏置量Bias=2+127=129



f


l


o


a


t






















B


i


a


s


=



2



k


?


1




?


1


=



2



8


?


1




?


1


=


127













e


=












E


+

















B


i


a


s


=


2


+


127


=


129



所以5.2f的阶码为129=1000,0001
因此,5.2f在计算机中的表示形式为0 | 1000,0001 | 0100,1100,1100,1100,1100,110。
参考文档:

???1.http://blog.csdn.net/jjj19891128/article/details/22938429
???2.http://blog.csdn.net/jjj19891128/article/details/22945441
???感谢!!!



友情链接: