深度剖析数据在内存中的存储


计算机中常用的数据表示格式有 定点格式浮点格式两种。
一般来说,定点格式容许的数据范围有限,要求的处理硬件比较简单;
浮点格式容许的数值范围很大,要求的处理硬件比较复杂。

定点数的表示

定点数,即小数点位置固定不变。
原理上,小数点的位置固定在哪一位都是可以的,但我们通常将数据表示成 纯小数纯整数

假设用 n+1 位字来表示一个定点数 x,由于约定了小数点的固定位置,就不再使用记号 “ .。这样,对于任意定点数 x=xnxn-1···x1x0,在定点机中可表示成如下形式:

定点小数

如果 x 表示的是纯小数,那么小数点就隐含在xn和xn-1之间。数的表示范围是0 <= |x| <= 1-2-n
定点小数

定点整数

如果 x 表示的是纯整数,那么小数点就隐含最低位x0的右边。数的表示范围是0 <= |x| <= 2n-1。
定点整数

目前计算机多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算

整数的机器码表示

为了区别一般书写表示的数和机器中编码表示的数,通常我们称前者为 真值,后者为 机器数或机器码。

若真值为 x,则用[x]、[x]、[x]、[x]分别表示真值所对应的原码、反码、补码、移码。
对于正整数,原码、反码、补码完全一样。

原码

原码表示简单易懂,直接用符号位加上二进制数的绝对值即可。

反码

在原码的基础上,符号位不变,数值位按位取反。

补码

反码+1即可。

比如 -10,这个整数:

整数真值 -10
原码 1000 0000 0000 0000 0000 0000 0000 1010
反码 1111 1111 1111 1111 1111 1111 1111 0101
补码 1111 1111 1111 1111 1111 1111 1111 0110

浮点数的表示

在计算机中任意一个二进制数 N 可以写成 N=2e·M,
计算机中,机器浮点数的组成如下图:
其中M称为浮点数的尾数,通常是用原码或补码表示的定点小数;E称为阶码,通常是用补码或移码表示的定点整数。

浮点数
阶码 E 反映浮点数的表示范围及小数点的实际位置;
尾数 M 的数值部分的位数反映浮点数的精度。

浮点数的规格化

如果不对浮点数的表示作出规定,同一个数的表示就不唯一。
为了提高数据表示精度,规定当尾数的值不为 0 时,尾数域的最高有效位应为 1。

当浮点数运算结果需要进行规格化处理时,将尾数 算术右移 一位,阶码减1,这种称为左规
当浮点数运算结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1,这种称为右规

P.S. 移码

移码通常用于表示浮点数的阶码。
阶码是个k位的整数ekek-1···e1e0(最高位为符号位),则移码的传统定义是:[e]=2k+e,2k > e >= -2k.
[e] 为机器数,e 为真值,2k 是一个固定的偏移值常数。

移码中的逗号不是小数点,而是表示左边的一位是符号位。
移码中的符号位表示规律与原码、反码、补码相反。

浮点数的机器表示

IEEE754标准规定了32位短浮点数和64位长浮点数的标准格式为:
浮点数
不论32位浮点数还是64位浮点数,由于基数 2 是固定常数,固不必采用显示的方式来表示它。
IEEE754标准规定,在计算机内部保存 M 时,默认这个数的第一位总是 1,因此可以被舍弃,只保存后面的数据;等到读取的时候,再把第一位 1 加上,这样可以节省一位有效数字。

在32位浮点数中,S 是浮点数的符号位;M 是尾数,占 23 位,小数点位置在尾数域最左(最高)有效位的右边;E 是阶码,占 8 位,采用隐含方式表示,即移码。将浮点数的指数的真值 e 变成阶码 E 时,应将指数 e 加上一个固定的偏置常数 127,即 E=e+127.
一个规格化的 32 位浮点数 x 的真值表示x = (-1)S·(1.M)·2E-127.

64位的浮点数中,符号位 1 位,阶码域 11 位,尾数域 52 位,指数偏移值时 1023。
一个规格化的 64 位浮点数 x 的真值表示x = (-1)S·(1.M)·2E-1023.

浮点数表示一些小数的时候并没有那么精确,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值