返回

JS迷你书 · Number类型二进制表示法

前端

您一定有在各类编程语言中看到过类似这样的小数:3.143.1415926,这些小数统称为浮点数,用于表示实数。如果将它们转化为二进制表示,那么你得到的不是熟悉的0和1,而是会有很多奇怪的数字和字母。

比如,3.14的二进制表示为11.0010010000111111011010101000100010000101101000110001000110010011,这串二进制数无论是在计算机还是在人类的眼中都显得十分冗长,如果再大一些,就根本没办法阅读了。

因此,计算机使用一种名为“指数表示法”的二进制表示法来表示浮点数。指数表示法的基本原理与普通的科学计数法相同,都是将浮点数表示为a×10^b的形式,只不过在计算机中,进制是以2为底的,即a×2^b。比如,3.14的指数表示法为1.10010010000111111011010101000100010000101101000110001000110010011×2^1

指数表示法虽然比普通的二进制表示法简洁了很多,但是依然存在一些问题。比如,它不能表示无限循环的小数,也不能表示0。为了解决这些问题,计算机使用了一种名为“IEEE 754”的浮点数标准。IEEE 754标准定义了两种浮点数格式:单精度浮点数和双精度浮点数。单精度浮点数占32位,双精度浮点数占64位。

在IEEE 754标准中,浮点数的二进制表示分为三个部分:符号位、指数位和尾数。符号位占1位,用于表示浮点数的正负。指数位占11位,用于表示浮点数的阶码。尾数占23位,用于表示浮点数的小数部分。

3.14的二进制表示法转化为IEEE 754标准的双精度浮点数,首先需要将小数部分1.10010010000111111011010101000100010000101101000110001000110010011右移1位,得到0.11001001000011111101101010100010001000010110100011000100011001001,然后将小数点前面的1补齐,得到1.10010010000111111011010101000100010000101101000110001000110010011。接下来,需要将阶码转换为二进制表示,阶码是127,二进制表示为01111111。最后,将符号位、指数位和尾数组合起来,得到0 01111111 110010010000111111011010101000100010000101101000110001000110010011

这就是3.14的IEEE 754标准的双精度浮点数表示法。通过这种方式,计算机可以将浮点数表示为一串二进制数,并进行各种运算。