计算机中数值数据的表示

计算机中数值数据的表示

真值与机器数

真值即在生活中实际使用到的数,如 +48,-9,+12.5

机器数则是真值在计算机中的表示。因为计算机只能存储0和1,而真值却有正负符号,所以用原码表示的机器数规定将真值中的正号用0表示,负号用1表示,且符号位一般位于最高位。如十进制真值的+3在机器中用八位的数表示为00000011.第一个0是符号位,其余七位是真值的绝对值的机器表示

原码

原码是机器数的一种,如上文说到的。这种机器数规定将真值中的正号用0表示,负号用1表示。

  • 原码能表示的数据的范围(设机器字长为8位,即原码由八位二进制数来表示)

    8位二进制原码能表示的最大的数:01111111 其十进制真值为:+127

    8位二进制原码能表示的最小的数:11111111 其十进制真值为:-127
    故8位表示的原码共能表示255个数,其中0被重复表示了一次(+0,-0)

  • 真值中的0在原码中的表示

    +0 : 00000000

    -0 : 10000000

  • 原码的意义

    原码是真值在机器中最直观的表示,简单易懂。但它进行加法运算复杂。这是因为,当两个数相加时,如果两 数同号,则直接将除符号位外的数相加;如果异号,则要进行减法。因为减法得到的数可能位整数,也可能是 负数,所以要先比较其绝对值的大小,然后用大数减去小数,最后还要选择恰当的符号

反码

反码也是机器数的一种,反码规定正的真值(即正数)的反码为其原码,负的真值(即负数)的反码是将原码除符号位外的位 置反。如+7的反码就是原码00000111,-7的反码是原码出符号位外置反:011110000

  • 反码能表示的数据的范围

    与原码相同

  • 真值中的0在反码中的表示

    +0 : 00000000

    -0 : 11111111

  • 原码到反码的过渡

    用原码进行减法运算,如十进制的运算:+1 - 2 可以写成 +1 + (-2),在机器中则表示为: 00000001 + 10000010
    其结果为10000011 ,换成十进制的结果就是-3,结果明显不对。这是因为在计算时将符号位带入进行了计算。 如果计算机要用原码进行减法运算,则如前文所说,先比较其绝对值的大小,结果是-2的绝对值更大,所以用2 - 1,然后确定符号为负,最后将其组合才能得到正确结果。这便需要一种编码方式能够将符号位带入一起计算以 增加运算速度,这时便出现了反码。对于反码来说, +1 + (-2) 表示为:00000001 + 11111101,结果为 11111110,将其换为原码为:10000001,其真值即为正确答案-1。嘻嘻嘻,是不是很厉害?

  • 反码的意义

    反码一般用作计算补码或原码的过渡

补码

补码是机器数的一种。在真值的反码上加1就得到了补码。其最初来源于模运算,解决了计算机计算减法的问题

  • 补码能表示的数据范围

    -128到+127

定点数

计算机中只能表示0和1,而没有剩余的东西来表示小数点。所以需要人为规定一个机器数的小数点。 按照某种规则将其存入,取出时将其解析。这样便能隐含表示小数了。

  • 定点整数与定点纯小数

    规定,对于定点整数,隐含的小数点在数的末尾。比如计算机中存储了01111101这个数(这个数用了八位反 码 表示,第一位位是符号位),转换成原码为00000011。当将其当成整数解析时,这个数转换成十进制写在纸上为 +3. ,为便于理解,可以在后面加个零:+3.0 。当将其看成小数读取时,其小数点规定了的是在数的最前面,符号位的后面,即转换成十进制写在纸上为+.3 ,为便于理解,可以在前面加个零:+0.3

  • 定点数表示法能表示的数值范围

定点数表示法能表示的数值范围依据其用几位来存储和定点的位置来确定。

以32位机器为例,一个数用32位来保存,即4个字节存储.
看图:
32位机器用定点法表示一个数
这个数用了32位来表示,第一位是符号位,小数点被定在第23位后面,第二十四位前面(从右往左)。(该图点的标注有偏差,应在红绿两种颜色之前)。这样规定小数的位数后,一个32位二进制表示的数的真值就确定下来了。该数用原码进行了表示,其真值即为+124.25 。用该方法(32位储存,原码表示,小数点位在23位后)表示数,其最大数为除符号位外全为1,即真值为255.9999998807907104,能表示的最小的数为-255.0

  • 定点数的意义

    小数点位置在进制表示中是至关重要的,位置差一位整体就要差进制倍(十进制就是十倍)。在计算机中也是 这样,虽然计算机使用二进制,但在处理非整数时,也需要考虑小数点位置的问题,无法对齐小数点就无法做 加法、减法比较这样的操作。我们说小数点位置,永远是说相对于我们存储的数位来说的,比如说我们存储了 01001001,然后小数点在第三位之后,也就是010.01001了。在计算机中处理小数点位置有浮点和定点两种, 定点就是小数点永远在固定的位置上,比如说我们约定一种32位无符号定点数,它的小数点永远在第5位后 面,这样最大能表示的数就是11111.111111111111111111111111111,它是32 - 2-27,最小非零数是2-27。 定点数是提前对齐好的小数,整数是一种特殊情况,小数点永远在最后一位之后。

此段摘自:

https://www.zhihu.com/question/19848808/answer/120393769

浮点数

  • 定点到浮点的过渡

定点表示法因其难以避免的局限性 (表示范围和精度是一对矛盾体),已经被当代桌面处理器(如x86)摒弃不用。

来看为什么表示范围和精度不能兼得。
该图展示了当16位定点数渴求更大的数值表示范围时精度也在逐渐损失的过程
图中用到的进制转换工具:

https://www.sojson.com/hexconvert.html

该图展示了当16位无符号定点数渴求更大的数值表示范围时,其精度也在逐渐损失的过程。因此浮点数应此而生。

  • 浮点数表示法

对于定点数,不同公司不同处理器有不同的做法(控制存储位数,小数点的位置)。而各大处理器厂商对浮点数的表示遵循了IEEE 754规定。

对于数N(十进制):可用科学计数法来表示: ± N = M x RE

其中M代表尾数,R代表基数。E代表阶码,是RE的指数。

基数R好理解,就是存储数时这个数的进制,这个数时二进制那么基数就是2,是八进制就是8.计算机的底层采用的是二进制,所以基数一般都是2.

对于十进制数:52.4

用科学计数法表示为: 5.24 x 101 ,或将小数点左右移动,阶码相应加减。
5.24即是这个数的尾数,即这个数的有效数字,更准确的说法是尾数为524。这个数的阶码为1,基数为10。那么其在计算机中用浮点表示法怎么表示呢?用16位机器举例,假设其用1位来存储符号位,用10位来存储尾数,用5位来存储阶码。

IEEE 754规定,尾数的绝对值要满足: 0.5 <= |M| <1。至于为何要这样,下文再谈。

所以对于52.4,我们这样表示:0.524 x 104,即将尾数变成了0.524,阶码相应的变成了2。这样的操作称为左规,相应的还有右规,就是将尾数小数点移动,阶码进行相应变换来达到IEE754的规范。根据前文的规定,将尾数转换为10位补码来表示,因为计算机无法精确表示小数,0.524转换为二进制是0.10000110001001001101110100101111000110101001111111,去掉第一个零后是10000110001001001101110100101111000110101001111111。但因为只能用10位来保存尾数,所以从左往右第11个数起,全部截断,留下1000011000,再将其转换为补码:0111101000。阶码2转为5二进制补码为:11110.所以52.4这个数用浮点表示法在计算机中实际是下面这个样子:

52.4用浮点表示法在计算机中的表示
再计算出这个数的真值为:52.34375,发现损失了数据。如果我们换成用12位来装尾数,3位来装阶码,那么这个数通过浮点表示法被存入后再去除计算其真值为:52.392578125,其精度增加了。所以,精度主要由尾数决定,表示范围主要由阶码决定。

  • 浮点数的表示范围

浮点表示法能使数据的表示范围扩大。设机器中的数由8位二进制数来表示(第一位为符号位)。

若用定点表示法,其能表示的最大定点小数为11111111(原码表示),换成十进制为0.9921875(近似)。其能表示的最小定点小数(0除外)为10000001,即十进制的0.0078125

若用浮点表示法,设符号占1位,阶码占2位,尾数占5位,其能表示的最大的小数(<1)(原码表示)为1 11 11111。计算其真值为:111.1,换算成十进制为7.5,其能表示的最小的精确度最高的小数(0除外)(原码表示)为0 11 00001。计算其真值为:0.0000001,换算成十进制为0.0078125

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值