数字

2021-08-24  本文已影响0人  古星_8cb9

在计算机中根据小数点位置是否固定,数字分为定点数和浮点数两种类型,整数属于定点数,它的小数点始终固定在最右边。浮点数,根据精度可以分为单精度浮点和双精度浮点数两种。

一、整数

整数分为无符号整数和有符号整数两种

1、无符号整数

无符号整数按其二进制的形式直接存储

2、有符号整数

有符号整数是在无符号整数的基础上在最左边加上符号位构成的

然而在计算机中,为了加快运算速度,有符号整数并不是以原码的形式而存在的,在存储和读取时都需要进行转化。


转化流程

可以认为,补码是在反码的基础上打了一个补丁,进行了一下修正,所以叫“补码”。
原码、反码、补码的概念只对负数有实际意义,对于正数,它们都一样,有了这几步转化,计算机减法统一为加法,并带符号直接运算,大大简化了硬件电路,不需要再区分正负符号,以及将加减统一为加。

二、浮点数

浮点数在计算机中以科学记数法的方式存在的,根据精度不同可分为32位的单精度浮点数,和64位的双精度浮点数。


浮点数
1、单精度浮点数:

单精度浮点数,共32bit占4个字节内存,由符号位、指数位、尾数三部分组成,下面结合8.5(100.1 |{1.001*2^2})具体说一下

由此可依得出,单精度浮点数对应的{十进制值=符号位 * 1.尾数*2^{指数-1111111}}
对于8.5这个例子
{8.5 = 1*1.001 00000 00000 00000 00000*2^{10000001-1111111}}
简化一下得
{8.5 = 1*1.001 *2^{10} =1.001 *2^{2}}
去掉指数得
{8.5 = 100.1 }
同理亦可计算出单精度浮点数的极值,{极大值 = 1*1.11111 11111 11111 11111 111 *2^{127} =2 *2^{127 }=2^{128}=3.4*10^{38}}

2、双精度浮点数

双精度浮点数,转化原理同单精度没有区别只是位数,最大最小值的变化。

三、js中的Number

对于js,所有的number都是双精度浮点数。
对于浮点数的运算,存在精度丢失问题,因此js中也会如此,造成的原因就是小数部分转化为二进制,例如0.3,一只*2取整数,是取不尽的,故而知能取约数,因此产生恶劣精度丢失。

上一篇 下一篇

猜你喜欢

热点阅读