您的位置:首页 > 理论基础

计算机中数的表示

2016-11-03 16:46 1776 查看
     最近研究了一下计算机中数据的表示形式,其实这是大学《计算机组成原理》中的知识,无奈上课睡觉早都还给老师了。
一. 基础知识

    1.源码
      最高位表示符号位,其余位表示该数的绝对值;

      0000 1010(b表示二进制)是10,1000 1010是-10;

      0的原码:0000 0000(+0),1000 0000(-0);

      一个字节的表示范围是-127~127。

    2.反码
      正数的反码等于其源码,负数的反码是其原码除符号位外,其余位数按位取反;

      0000 1010是10,1111 0101是-10;

      0的反码:0000 0000(+0),1111 1111(-0);

      一个字节的表示范围是-127~127。

    3.补码
      正数的补码等于其源码,负数的补码是其反码+1;

      0000 1010是10,1111 0110是-10;

      0的补码:0000 0000(+0),0000 0000(-0)(1111 1111 + 0000 0001= 10000 0000,由于一个字节只有8位所以最前面的1丢弃);

      一个字节的表示范围是-128~127(1000 0000表示~128)。

    4.计算机中的数据是以补码(整数)形式表示的;

    5.计算机对数据的存储方式有两种:定点和浮点;

    6.字节是倒叙存储的,即低字节在左边,高字节在右边

二. 有符号和无符号整数

    无符号整数:表示的数据都是非负整数,所有的比特位都表示数值。以一个字节的长度(即8个比特位)为例,它能表示的无符号整数的范围是0~255(二进制表示:00000000~11111111);

    有符号整数:最高的比特位表示数据的正负(0表示正,1表示负)。以一个字节的长度(即8个比特位)为例,它能表示的有符号整数的范围是-128~127,(二进制表示:10000000~01111111)。

三. 定点数

    定点数是指小数点位置是固定的,而小数点固定的位置又分为两个a:固定在最后一位比特位之后,b:固定在最高位比特位之后。

    a情况表示的数是整数即定点整数,如0000 0111是7,1000 0111是-7;

    b情况表示的数是纯小数,即定点小数,如1110 0000,是-0.75。

    定点数的情况具体参考上一节的有符号整数。

四. 浮点数

    浮点数是指小数点的位置是浮动的,它在某些情况下只能近似的表示小数,包含float和double。

    IEEE754单精度浮点数格式[1]

    单精度浮点数据占4个字节,4个字节的分配如下:

    1)第1位为符号位,0表示正,1表示负;

    2)第2~9位为阶码,采用移码表示;

    3)第10~32位为尾数,采用原码表示。

    将十进制小数转换为二进制(单精度)[2]

    1)以10.625为例说明,先转换整数部分10 = 1010;

    2)转换小数部分0.625 = 0.101,于是10.625 = 1010.101;

    3)将1010.101表示为±a*(2^e)的形式,其中±是符号,a是尾数,e是指数。1010.101=1.010101*(2^3),显而易见,最高位永远是1,所以我们没有必要保留它,这样尾数的二进制就变成了:010101*(2^3),注意前面是有小数点的,但是既然一定有小数点,那这个小数点也是没有必要保存的;

    4)第10~32位表示尾数a,本例中a补零后变为:010 1010 0000 0000 0000 0000;第2~9位为阶码,表示指数e,范围~128-127,该位置处的实际值是e+127,如果e超过127,则从~128开始计算(此即为移码表示),本例中该位置的值为3+127=130(1000 0010);第1位为符号位,本例为1;

    5)10.625的二进制(单精度)表示形式为0100 0001 0010 1010 0000 0000 0000 0000,由于计算机中字节是倒叙存储的,所以在内存中的表示形式为0000 0000 0000 0000 0010 1010 0100 0001(16进制表示为00 00 2a 41),如图一所示。



                                                                                                                    图1

    注意这个例子的特殊性:它的小数部分正好可以用有限长度的2进制小数表示,因此,而且整个有效数字部分a的总长度小于23,因此它精确的表示了10.625,但是有的情况下,有效数字部分的长度可能超过23,甚至是无限多的,那时候就只好把后面的位数截掉了,那样表示的结果就只是一个近似值而非精确值;显然,存储长度越长,精度就越高。比如双精度浮点数,1位符号位,11位指数位,52位有效数字。

五. Reference

     [1] http://blog.csdn.net/solomon1558/article/details/40798901
     [2] http://blog.csdn.net/woaixiaozhe/article/details/7429683
   

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  整数 浮点数 定点数