用科学计数法表示二进制小数_数值数据的表示

a0c7624cc7cf8b45a562036e899c99ac.png

在学习之前,我们先来看一段代码的计算。为什么会出现这样的结果呢?

std

在计算机中最主要的数据类型有无符号整型、有符号整型、浮点数、布尔值

  • 布尔值

就是真/假,1或者0。在计算机中用最小的1个字节表示,即8位。

  • 无符号整型

即我们数学中的正整数,在计算机中使用二进制的原码表示无符号整数,没有正负号占位。在32位电脑中,最大数为2^32-1,最小值为0。

  • 带符号整型

带符号的整型,用最高位表示正负号。0表示正号,1表示负号。所以,在32位电脑中,最大值为2^31-1,最小值为-2^31。在计算机中,带符号整型的整数部分用补码表示。正数的补码还是自己,负数的补码是符号不变,其余各位取反,末尾加1。即[-1]=[100000001]原=[11111111]补

那么问题来了为什么不用原码表示?不是更直观?更让人理解吗?首先,我们人脑知道第一位是符号位,我们可以根据正负号来进行加减法。但是,对于计算机而已,加减法已经是最基础了,要设计的尽量简单。如果计算机辨别“符号位”显然让计算机的基础电路设计的变得十分复杂!于是人们想出将符号位也参与运算的方法。即1-1=1+(-1)。下面开始探索将符号位参与运算。有关原码、反码、补码的计算方式见如下:

Chdy:开篇——内容概要​zhuanlan.zhihu.com
81740713460fbeb77c390e45971f1bc7.png
原码:1+(-1)=[00000001]原+[10000001]原=[10000010]原=-2
反码:1+(-1)=[00000001]反+[11111110]反=[11111111]反=[10000000]原=-0
补码:1+(-1)=[00000001]补+[11111111]补=[00000000]补=[00000000]原=0

显然,原码的计算结果是错误的。而反码和补码是正确的。而反码问题就出现在“0”的表示上,+0=[00000000]反,-0=[11111111]反。显然正负0用反码表示是不等的。于是,带符号的整数就用补码来表示。

说完了,有符号、无符号整型在计算机中的表示方式!我们就可以解答前面提到过的问题。 首先计算机在判断两个数的大小,先判断两个数的类型,两个值为有符号类型,则用有符号表示。如果一个值为无符号整型,另一个值为有符号整型,计算机就会使用无符号整型来比较。-1<0,在计算机中的结果为真,是因为将这两个值都当作是有符号整型来处理了,则[-1]=[111111111]补,[0]=[00000000]补,使用有符号整型处理,负数自然要比0小,所以结果为真。而-1<0U在计算机中的结果为假,是因为[-1]=[111111111]补,[0]=[00000000]原,计算机把他们当成了无符号的整型来比较了([11111111]=2^7),所以结果就出现了-1<0U为假。

  • 浮点数

f23bbe81dac5b7ddebcecdf75607389c.png

插入图片更加直观。其实,浮点数就是用我们的科学计数法来在计算机中表示。但是,里面也包含了一些规范。此处我们拿32位计算方式来举例,64位类推。

  1. 第一位表示正负号,0表示正号,1表示符号;
  2. 用8位表示科学计数法的指数,计算机内值需要减去127,才等于真值。反之真值加上127,等于计算机内值大家考虑一下,为什么要减去127呢?大家可以思考一下!
  3. 剩余的23位用于表示小数部分;
  4. 整数部分1,不在计算机中表示。转化为真值,需要加1。
-2.32在计算机中的表示为:
转化:将整数部分用二进制表示2=[10]原,小数部分0.32=[0.010100011110...]
规格化:使用科学计算法可表示为-1*1.0010100011110...*2^1
填充:用计算机內值表示为s为1,Exponent为1+127,Significand为尾数0010100011110...
内存中的表示为1 10000000 0010100011110...

尾数部位是一个无限循环小数,看到这里我们就明白了,为什么在编译器中浮点数精确度不准确的原因了把!下面提供一个网站,可以用来将真值转化为计算机內值。

IEEE-754 Floating Point Converter​www.h-schmidt.net

在结尾的时候,我们来思考一下!为什么指数的介要加一个偏置常数(127,即2^(8-1)-1)呢?试想一下,如果我们不加这个偏置常数,指数的介是负数要怎么表示?所以,这里面加上一个偏制常数,是为了表示负数的?一些好奇的同学又会问,为什么不跟带符号整型一样使用补码的方式来表示呢?上文中,不是提到很多补码的好处么?带着这个问题,我们进行下一个课题的学习——逻辑门电路。计算机是怎么实现加、减、乘、除的?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值