内存操作与结构体

一、数据在内存中的存储

由于算法工程中打交道最多的是某个位置的坐标值,坐标[x,y,z]的值在Java开发中我们一般以double类型的数组表示,故本文主要简单回顾了浮点数在内存中的存储方式

(1)IEEE-754标准

历史:

IEEE-754标准的主要起草者是来自UCB的数学教授William Kahan。他帮助Intel设计完成了8087浮点运算单元(FPU)。由于设计的浮点标准是如此的出色,使得IEEE将此标准作为IEEE浮点格式的基础。

为了浮点数据处理对于硬件、软件或者两者的结合都能产生独立的结果,不受平台的影响,IEEE为执行浮点运算提供了一个统一标准,其规定了浮点数的表示格式、操作方式、舍入模式及异常处理

浮点数表示格式

在IEEE-754标准下,浮点格式主要分为四种类行,即单精度格式、双精度格式、扩展单精度格式和扩展双精度格式。其中32位单精度格式与64位双精度格式作为基础格式更为常用,扩展格式则有特殊目的,一般对用户透明。

(2)浮点数的存储方式

IEEE754 标准中规定 float 单精度浮点数在机器中表示用 1 位表示数字的符号,用 8 位表示指数,用 23 位表示尾数,即小数部分。对于 double 双精度浮点数,用 1 位表示符号,用 11 位表示指数,52 位表示尾数,其中指数域称为阶码。IEEE754 浮点数的格式如下图所示。

符号位 (Sign):0代表正数,1代表为负数;

指数位 (Exponent):用于存储科学计数法中的指数数据;

尾数部分 (Mantissa):采用移位存储尾数部分;

(3)简单示例

118.5二进制的科学计数法表示 1110110.1,可以表示为1.1101101 * 26

任何一个二进制数的科学计数法表示都为1. xxx * 2^n ,尾数部分就可以表示为xxxx,由于第一位都是1,所以将小数点前面的1省略。由此,23bit的尾数部分,可以表示的精度却变成了24bit(float有效位数相应的也会发生变化,而double则不会,因达不到)

小数部分:4bit 能精确十进制中的1位小数点(十进制9转为二进制为1001),24bit就能使 float 精确到小数点后6位

指数部分:指数可正可负(占1位),故8位的指数位能表示的指数范围只能用7位,范围是:-127至128。所以指数部分的存储采用移位存储,存储的数据为元数据 +127。

思考:移位存储的好处(待更新)

118.5 用二进制的科学计数法表示为: 1.1101101 * 2,按照上面的存储方式:

    符号位为:0,表示为正;

    指数位为:6+127=133,即 10000101;

    尾数部分为:1101101;

   

双精度浮点数的存储和单精度的存储大同小异,不同的是指数部分和尾数部分的位数。

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值