当前位置:首页 > 游戏资讯 > 正文

十进制数105.5的浮点数_浮点数转10进制计算器

本文目录一览

浮点数转换十进制数

根据国际标准IEEE 754,任意一个二进制浮点数V可以表示成下面的形式:

(1)(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。

(2)M表示有效数字,大于等于1,小于2。

(3)2^E表示指数位。

IEEE754标准中规定float单精度浮点数在机器中表示用 1 位表示数字的符号,用 8 位来表示指数,用23 位来表示尾数,即小数部分。对于double双精度浮点数,用 1 位表示符号,用 11 位表示指数,52 位表示尾数,其中指数域称为阶码。
题目中的32位浮点数,可以写为 S+E+M 三部分的形式:0 10000101 11011010000000000000000
F87AF9B3-96A6-4892-BBD7-107968F22B5B.png
IEEE 754对有效数字M和指数E,还有一些特别规定。

有效数字 M ,1≤M2,也就是说,M可以写成1.xxxxxx的形式,其中xxxxxx表示小数部分。IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。
至于指数E,首先,E为一个无符号整数(unsigned int)。这意味着,如果E为8位,它的取值范围为0-255;如果E为11位,它的取值范围为0-2047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,E的真实值必须再减去一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。
指数E还可以再分成三种情况:

E不全为0或不全为1。

这时,浮点数就采用上面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。

E全为0。

这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

E全为1。

这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)。

举例来说,

十进制的5.0,写成二进制是101.0,相当于1.01×2^2。那么,按照上面V的格式,可以得出s=0,M=1.01,E=2。

十进制的-5.0,写成二进制是-101.0,相当于-1.01×2^2。那么,s=1,M=1.01,E=2。

JS 中的最大安全整数是多少?

JS 中所有的数字类型,实际存储都是通过 8 字节 double 浮点型 表示的。浮点数并不是能够精确表示范围内的所有数的, 虽然 double 浮点型的范围看上去很大: 2.23x10^(-308) ~ 1.79x10^308。 可以表示的最大整数可以很大,但能够精确表示,使用算数运算的并没有这么大。

它其实连这样的简单加法也会算错:

所以在 js 中能够安全使用的有符号 安全 大整数(注意这里是指能够安全使用,进行算数运算的范围),并不像其他语言在 64 位环境中那样是:

而是

JS 的最大和最小安全值可以这样获得:

通过下面的例子,你会明白为什么大于这个值的运算是不安全的:

这些运算都是错误的结果, 因为它们进行的都是浮点数运算会丢失精度。

为什么是这个值?

double 浮点数结构如下:

1 位符号位
11 位指数位
52 位尾数位

使用 52 位表示一个数的整数部分,那么最大可以精确表示的数应该是 2^52 - 1 才对, 就像 64 位表示整数时那样: 2^63 - 1 (去掉 1 位符号位)。 但其实浮点数在保存数字的时候做了规格化处理,以 10 进制为例:

对于二进制来说, 小数点前保留一位, 规格化后始终是 1.***, 节省了 1 bit,这个 1 并不需要保存。

解决浮点数溢出的办法

使用toFixed方法返回一个以定点表示法表示的数字的字符串形式

调用一个处理函数

参考文章: http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html

二进制小数转化为十进制

在本例中,我们将把二进制数10011011转换为十进制数。从左到右地列出2的幂。从20开始,结果为"1"。每向右移一位,就对其指数加1。列出的元素个数应等于二进制数的位数。在本例中,10011011有8位数字,因此应列出的8个元素:128, 64, 32, 16, 8, 4, 2, 1

02
把二进制数上的每一位数字对应地写到列表下方。

03
从右边开始,画出线条,用于把二进制数中连续的数字和其上方的2的幂连接起来。从右边开始,画一条线,把二进制数的第一个数字和2的第一个幂值连接起来。然后,画一条线,把二进制数的第二个数字和2的第二个幂值连接起来。依次类推,画出线条把每一个数字和对应的幂值连接起来。

04
扫描二进制数中的每一位数字。如果对应的数字为1,则在线条下方写下对应的2的幂值。如果对应的数字为0,则在线条下方写下0。

05
把线条下方的数相加。所得总和为155。这就是二进制数10011011对应的十进制数。或者写成基数下标的形式:

06
以上方法熟悉后,你将记得2的每一个幂值,因此可以省略第1步。

双倍法
01
该方法不需要使用幂运算。因此,当你通过心算转换较大的数值时,该方法更简单,因为你只需要记下部分和。

02
从给定二进制数最左边的数字开始。对于每一位数字,你向右移动,对之前所得总和乘以2并加上当前数值。例如,把1011001转换为十进制数,我们将采用如下步骤:

03
1011001 → 0 * 2 + 1 = 1

04
1011001 → 1 * 2 + 0 = 2

05
1011001 → 2 * 2 + 1 = 5

06
1011001 → 5 * 2 + 1 = 11

07
1011001 → 11 * 2 + 0 = 22

08
1011001 → 22 * 2 + 0 = 44

09
1011001 → 44 * 2 + 1 = 89

10
和按位记数法一样,本方法经调整后也能把基于任何基数的数转换为十进制数。在这里采用双倍法因为这里给定的数是以2为基数的。如果给定的数是基于不同的基数,则应本方法中的2换成对应的基数。例如,如果给定数是以37为基数,则你在计算时应把*2换为*37。而最终的结果则总是对应的十进制数(基数10)。 :)

特别提示
练习。尝试转换二进制数11010001、11001和11110001。它们对应的十进制数分别是209、25和。

Microsoft Windows上的计算器能帮助你完成不同数制中的数的转换,但作为一名程序员,你应该理解并掌握转换的方法。计算器中的转换选项可以通过选择"查看"菜单中的"科学型"(或 "程序员")。在Linux上,你可以使用galculator。

这里使用的是无符号二进制数,而非有符号数、浮点数或定点数

十进制数105.5的浮点数

把浮点数1100000111001001000000000000分割成三部分,可得.1001001×24    (其中前面的“1.”从隐含位而来)
4、该浮点数的非规格化形式:11001.001
5:
1.125        (因为符号位为1、该浮点数的十进制数为-25:
符号位是1,阶码是10000011,尾数是1001001000000000000
2、还原阶码:1:10000011

01111111=100
3、该浮点数的规格化形式单精度浮点数转换十进制步骤:
1、分割数字的符号、阶码和有效数字;
2、将偏移阶码减去偏移,得到真正的阶码;
3、把数字写成规格化的二进制数形式;
4、把规格化的二进制数改变成非规格化的二进制数;
5、把非规格化的二进制数转换成十进制数。
单精度浮点数转换十进制举例:
把协处理器中的浮点数1100000111001001000000000000转换成十进制数