图解计算机中的数值范围和浮点运算

写在前面

在【程序员进阶系列】专题的《图解计算机中数据的表示形式》一文中,咱们详细的说明了在计算机中数据的表示形式。今天,咱们继续来讲计算机中的数值范围和浮点运算相关的知识。走起,继续,咱们一块儿进阶,一块儿牛逼。git

文章已收录到:程序员

https://github.com/sunshinelyz/technology-binghegithub

https://gitee.com/binghe001/technology-binghe算法

数值的表示范围

在计算机中,码制所表示的范围,能够分为定点整数和定点小数。在定点数中,小数点是固定的。定点整数就是说小数点在最低位的后面,也就是在最右面,此时的小数点能够忽略不写。定点小数就是小数点在最高位的前面,也就是在最左边。微信

值得注意的是:在定点整数和定点小数中,小数点都不占位数。因此,小数点在定点整数和定点小数中不会影响数值的范围。3d

咱们能够将定点整数和定点小数的取值范围总结成下表所示。blog

码制 定点整数 定点小数
原码 -(2n-1 -1) ~ +(2n-1 -1) -(1-2-(n-1)) ~ +(1-2-(n-1))
反码 -(2n-1 -1) ~ +(2n-1 -1) -(1-2-(n-1)) ~ +(1-2-(n-1))
补码 -2n-1 ~ +(2n-1 -1) -1~ +(1-2-(n-1))
移码 -2n-1 ~ +(2n-1 -1) -1~ +(1-2-(n-1))

表格中的n表示机器的字长,也就是用多少位二进制数表示。token

这张表小伙伴们不用死记硬背,说白了,这张表,冰河也记不住,那咱们怎么办呢?不慌,这里,我给你们举一个例子。get

例如,咱们这里使用4位机器字长来表示,为了理解方便,这里我用四个方框来表示4位二进制数。
数学

默认最高位为符号位,以下所示。

这里咱们先用4位二进制数表示定点整数,则最小值为1111,最大值为0111。

最小值1111表示以下。

其转换成10进制数为-7。

最大值0111表示以下。

其转换为10进制数为7。

这样,咱们使用4位二进制数表示的范围,则能够计算出结果为:-7 ~ 7。也就是 -(24-1 - 1) ~ +(24-1 -1),因此,当使用n位二进制数表示数值的范围时,咱们能够得出数据的表示范围为: -(2n-1 - 1) ~ +(2n-1 -1)

因此,咱们根本就不须要记住定点整数和定点小数的取值范围表,只须要简单的使用一个实际的二进制位进行验算便可得出正确的结果数据。好比,我这里以4位二进制位进行验算举例。

还有一点须要注意的是:补码和移码比原码和反码少一个数,就是-0。另外,验证定点小数和验证定点整数的方式相同,小伙伴们可自行验证定点小数的值,这里,我就再也不赘述。

若是咱们使用8位二进制数表示,则定点整数的取值范围为:

1111 1111 ~ 0111 1111 转换为十进制数就是: -127 ~ 127,将二进制数转换为补码为:1000 0000 ~ 0111 1111。

其中,-128的补码为1000 0000是人为规定的。

若是使用8位二进制数表示,则定点小数的取值范围为:

-0.1111 1111 ~ +0.11111111,补码的范围为: -1~ + +0.11111111。

其中,-1的补码为1000 0000是人为规定的。

浮点数的运算

浮点数的表示

首先,咱们先来看下浮点数的表示形式,浮点数的表示形式以下,

N = 尾数 * 基数指数

对于浮点数来讲,咱们最常说的就是圆周率 π,数学上常使用3.14来表示π的值,若是使用科学计算法的话,咱们可使用形如3.14 * 103 这样的数来表示。其中,在3.14 * 103中,3.14表示尾数,10表示基数,3表示指数。

另外,3.14 * 103 能够写成多种形式,好比能够写成 0.314 * 104,也能够写成0.0314 * 105

浮点数的存储格式

浮点数在计算机中的表示中,阶码是带符号的纯整数,尾数为带符号的纯小数。浮点数的表示格式以下所示。

一个数的浮点数表示不是惟一的。当小数点的位置发生改变时,阶码也会相应的改变。可使用多个浮点形式表示同一个浮点数。浮点数的数值范围主要由阶码决定,数值的精度则是由尾数决定的。

浮点数的运算过程

运算的过程要依次经历对阶、尾数计算和结果格式化三个阶段。

例如计算:3.14 * 103 + 1.5 * 105的结果数据。

首先,咱们须要先进行对阶操做,这里有个原则就是小数向大树看齐,这里咱们须要将3.14 * 103进行对阶操做,转化成0.0314 * 105,而后与1.5 * 105进行相加操做,得出结果数据1.5314 * 105

接下来,咱们再来看看浮点数的特色。

浮点数的特色

浮点数的主要特色以下所示。

  • 通常尾数使用补码表示,阶码使用移码表示。
  • 阶码的位数决定数的表示范围,位数越多范围越大。
  • 尾数的位数决定数的有效精度,位数越多精度越高。
  • 对阶时,小数向大数看齐。
  • 对阶是经过较小数的尾数右移实现的。

好了,今天就到这儿吧,我是冰河,你们有啥问题能够在下方留言,也能够加我微信:sun_shine_lyz,我拉你进群,一块儿交流技术,一块儿进阶,一块儿牛逼~~

相关文章
相关标签/搜索