数据的表示与存储

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=00000001+0000,0010=0000,0011=00000011=00000011=3 1 10 + 2 10 = 0000 , 0001 补 + 0000 , 0010 补 = 0000 , 0011 补 = 0000 , 0011 反 = 0000 , 0011 原 = 3

110+210=1111,1111+0000,0010=0000,0001=00000001=00000001=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标准,可以得出
    floatBias=2k11=2811=127e=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.youkuaiyun.com/jjj19891128/article/details/22938429
   2.http://blog.youkuaiyun.com/jjj19891128/article/details/22945441
   感谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值