java浮点数存储方式_浮点数如何存储在CPU内?

与小学数学没什么不同 . 我们在小学阶段学会先做正数整数加减,减去所有这些 . 然后我们学会了制作一个代表减号的水平划痕,并指出负数,并了解了数字线,我们不能去netagive . 因此,是否存在负号(或负号与加号)表示个别数字为正数或负数 . 它只需要一位二进制来表示我是消极的或积极的 . 这是/ this浮点格式(或任何其他格式)中的“符号”位 .

然后在小学的某些时候,我们在做了一段时间的分数之后学会了小数点 . 那只是我们在两个数字之间放置的一个时期,它表示最后一个数字的位置和分数开始的位置 . 我可以在那里停下来说没有任何理由让基地2与基地10从基地27不同,你只需在两个数字之间放一个句点来表示最后一个整数的位置和分数的第一部分 . 但浮动点更进一步 . 现在这可能是在小学或以后的中学,但他们最终教我们科学记数法和/或通过移动小数点来表示数字的其他方法,小数的种类仍代表最后一个整数和分数的开始但是偏离一边我们将基数乘以幂

12345.67 = 1.234567 * 10^4

这就是这个难题的剩余部分 . 只要我们有足够的纸张和足够的铅笔芯(石墨),我们可以使用铅笔和纸张写出数字,我们可以使用尽可能多的数字来编写数字,但正如您已经知道的那样,我们通常会受到寄存器大小的限制,现在我们可以使用其他小学的知识将8位alu转换为无限数量的位alu(只要我们有足够的内存/存储位),但在这种情况下我们仍然处理8位 . 在这种情况下,他们选择最初的32位,64位和80位(或者后来可能更晚)格式,所以我们的位严格限制这些数字(我们现在有16位,可能更小,虽然这没有多大意义),并且它们使用时间基于幂指数 . 东西是上面的1.234567的尾数但是没有小数点1234567存储小数点的位置是假设/同意的(已知) . 它是数字中的第一个非零数字,所以123456.7我们将它移动到1.234567并调整指数为78.45我们将它移动到7.845并调整基数乘数上的指数 . 因为这是二进制的,所以只有一个值不为零且是一个(一个位是0或1)所以011101.000我们将它移动到1.110100并调整指数 . (这就像科学记谱法,但基础2)

接下来,这个尾数中的位数或科学计数法中的有效数字如果你想这样想是限制在23或一些位数内,请参阅单精度浮点格式的维基百科页面(32位一位) ,双精度是64位,并且工作方式完全相同,只是有更多的尾数和指数位) . 所以我们得到我们的数字然而我们找到最重要的数字,我们在那里移动小数点并调整乘数上的指数就像我们上面所做的那样

11101.01 = 1.110101 * 2^4

我们技术上不需要在小数点前存储1,我们不需要存储2但我们需要存储110101,我们需要以二进制形式存储4 . 随着上述情况中的符号表示正,所以符号,指数和尾数我们可以重建这个数字 . 要么任何符合那些不是很小或非常大的数字(这样的指数就不适合所分配的位数) .

然后,IEEE-754人员采取了最后一步,而不仅仅是编码指数,因为他们使用了一种向后的二进制补码 . 我们已经从计算机上的整数数学中了解了两个补码以及如何理解这些数字的样子 . 由于某些原因,他们没有做到这一点,它会更有意义,但他们宣称1000 ... 0000一个二进制的全零是中点的定义或另一种看待它的方式是全部零是最小的指数,所有的都是最大的指数,你必须调整它 . 我们知道在这种情况下,从8位数字的二进制补码中,最大数字是127,最小的-128,他们所做的是改变它,因此它们可以有更大的正指数而不是127到-128,因为在二进制补码中这是向后它是128到-127,对我们来说它只是意味着我们通过添加127进行调整 . 在我上面的情况下,2到4的功率4的二进制是100使用8位二进制补码00000100将其“编码”成单精度IEEE 754浮点格式变为10000011我只需添加127或添加128(10000100)然后减去一个 .

所以我撒谎还有一些事情,特殊情况,到目前为止我们有一个符号用于符号是正或负,8比特用于2乘法器的幂的编码指数,我们有尾数或分数位我们的数字有效数字 . 但零怎么样,零中没有非零位我们如何表示这个数字呢?那是一个特殊情况,几乎是硬编码的数字,但你实际上可以在格式中表示0和-0具有不同的位模式,但是我认为规范的后续版本鼓励或指示导致零的数学是正的,但是我我不知道多年来我没有看过规范的副本,因为你必须付钱才能合法地获得它 . 其他特殊情况称为NaN或不是数字,它们也是已知代表NaN的特殊位模式......并且有多个nan,因为您可以在尾数中放置不同的模式 . 这些情况可能是例如当你除以零时,或者当你的数字太大而你不能用幂数N表示它时,因为N对于指数中编码的位数来说太大了(更大)单个精度编码前的128以上或数字太小(指数小于-127) . 虽然在某些格式中有些数字称为微小数字或非正规数,而那些数字不是1.xxxx,但它们会让它滑动并且具有0.000 ... 1xxxx,这是一种无效的格式,但只是比我们的最小数字小一点可以表示,一些fpus /软件不支持非正规 .

现在转到维基百科并搜索单精度浮点格式,现在该页面应该有很多意义......我希望......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值