——关于float(4字节)的取值范围由来(-3.40E+38 ~ +3.40E+38)问题?
【float取值范围计算】
S EEEEEEEE PPPPPPPPPPPPPPPPPPPPPPP
表示的范围是:-(2^(2^(8-1)-1))*2~~~~(2^(2^(8-1)-1))*2 而(2^(2^(8-1)-1))*2化简之后其实就是(2^(2^7))用计算器计算得到:3.402824e38.
1.关于2^(2^(8-1)-1): 其实就是 EEEEEEEE 部分!(下面是拓展部分,你看了就知道)
(1)浮点数使用 IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 excess-127 二进制指数和一个 23 位尾数。
(2)【8位excess-127 二进制指数——阶码位】
1).Excess系统是计算机中可以同时存储正数和负数的一种方法。在这个系统中,数很容易从十进制转换成二进制,反之亦然。但是,在数上进行运算很复杂。现在对他仅有的应用,就是用来存储小数的指数值。
2).在Excess系统中,正数被称为幻数用于数据转换过程。幻数通常是(2^(n-1))或(2^(n-1)-1),这里,n是存储单元的位数。
例如:excess-127就是表示存储单元的位数n=8的情况下,而幻数为(2^(n-1)-1)!2的7次方减1得127!
(3)利用上面的知识,可知 EEEEEEEE 表示的数值范围为:2^(幻数),幻数=(2^(n-1)-1)因为是excess-127,储存单元数为8!
即是2^(2^(8-1)-1)!
2.乘以2又是怎么回事?
(2^(2^(8-1)-1))*2 是何原理机制,求指教,感谢! |