kebingoo
发表于 2019-4-10 13:11:22
朕想知道
苏浩
发表于 2019-4-11 16:59:38
朕想知道
taishangxue
发表于 2019-4-11 18:45:42
朕想知道
ajiemmd
发表于 2019-4-11 22:55:13
1
门三
发表于 2019-4-14 01:59:57
定点数:用二进制表示小数(#)
带井号(#)的内容为选修知识,因为理解难度较大,可能会在一定程度上打击初学鱼油的信心,请量力而学!
既然谈到了取值范围,那么很多同学可能会很好奇:小数在内存中是如何存储的呢?
计算机是执行 IEEE 754 浮点标准来存储小数的,这可不比整数补码那么好理解了。因此,会有许多初学者认为浮点数生涩难懂,没意思¥%……&&
所以这里小甲鱼尝试给大家以比较通俗的方式讲解~
刚开始的时候,不同的商家均设计了一套自己的存储方案,和运算细节的规定,可想而知导致的结果就是不同产品放在一起根本没法兼容……
这一现象直到 IEEE 754 标准(IEEE:电气和电子工程师协会)的制定才得以改变。值得一提的是,目前所有的计算机都支持这个 IEEE 754 浮点标准。
要理解浮点数的第一步,就是先理解定点数存储。
我们先看看大家更熟悉的十进制表示法:
其中每个十进制位 d 的取值范围是 0 ~ 9。
在 进制转换 中我们提到了位权的概念,这里是同样的。对于十进制数来说,小数点(.)左边的数是 10 的正数次幂,而小数点右边的数则是 10 的负数次幂。
举个栗子:
小数用二进制表示法也是同样的道理,对不对?
其中每个二进制位 b 的取值范围是 0 和 1。
对于二进制数来说,小数点(.)左边的数是 2 的正数次幂,而小数点右边的数则是 2 的负数次幂。
举个栗子:
再来个高清原理图:
从上图我们可以推测出:二进制小数点向左移动一位,相当于这个数的值除以 2;向右移动一位,相当于乘以 2。
举个栗子:
将 10.11 的小数点向左移动一位,数的值相当于除以 2:
将 10.11 的小数点向右移动一位,数的值相当于乘以 2:
用这种方法来存放小数,必然会存在一些问题,你能想到吗?
想不到的童鞋回复“朕想知道”查看!
micolar
发表于 2019-4-14 18:22:21
朕想知道
阿斯蒂
发表于 2019-4-16 11:38:39
{:5_90:}
珊珊的山大王
发表于 2019-4-16 14:49:58
真想知道
霜冷长河12
发表于 2019-4-16 17:09:14
1
王尧
发表于 2019-4-16 23:39:08
真想知道
宛陵梅溪
发表于 2019-4-17 11:30:17
朕想知道
2377183301
发表于 2019-4-17 16:29:51
想知道
3013468657
发表于 2019-4-18 09:51:51
1
857356283
发表于 2019-4-18 15:22:07
朕想知道
hnuzhangwang
发表于 2019-4-18 15:38:50
朕想知道
394521404
发表于 2019-4-18 20:02:01
‘’
文丶丶武
发表于 2019-4-19 00:23:40
123
logzhang
发表于 2019-4-19 01:40:46
朕想知道
绝地幼鲸
发表于 2019-4-19 22:04:39
郑想知道
过气de翠翠
发表于 2019-4-20 18:55:19
臣妾想知道