整数及浮点数在内存中的存储

整数在内存中的存储

众所周知,整数在内存中占4个字节,而一个字节由8个比特位组成,因此一个整数在内存中占32个比特位。并且整数在内存中存储是以二进制的补码的形式储存的。

二进制的原码,反码,补码:

在二进制中直接将数据翻译为二进制存在内存中的称为原码,其中第一位被称为符号位,0表示正整数,1表示负数。反码是将原码符号位不变,其他位按位取反,补码则是将反码加1。注意内存中储存的并非原码而是补码,如果将内存中的补码变为原码,给他们取反加1或减都可以变为原码,

int a = -1;
    10000000  00000000  00000000  00000001  原码
    11111111  11111111  11111111  11111110  反码
    11111111  11111111  11111111  11111111  补码

如图 整数-1的原码,反码,补码。

大端存储模式和小端存储模式

在一块内存中位置有低有高,高的一端被称为高地址,低的一端被称为低地址,如图。

二进制中将整数分为四个字节,左边为高位,右边为低位如下图所示:00 为高位,11 为低位。

将整数的低位存在内存的低地址中,高位存在高地址中,我们称为小端字节序,而高位存在低地址中,低位存在高地址中,被称为小端字节序。

​​​​​​​

浮点数表达方式

  浮点数与整数的存储方式截然不同,根据国际标准,任意一个二进制数都可以表示成下面的形式:

                                                V=(-1)^s*M*2^E.

(-1)^s表示符号位,当s=0,V为正数,当s=1时V为负数。

M表示有效数字,大于1,小于2。

2^E表示指数位。

例如 5.5我们可以表示为 (-1)^0*1.011*2^2.其中s=0,M=1.011,E=2。

浮点数在内存中的存储

浮点数的存储其实就是S,M,E的存储,不同类型的浮点数存储大小不同。

对于float类型来说,它具有32位,最高的一位储存s,接着8位储存E,剩下的23位储存M。

对于double类型来说,它具有64位,最高的一位储存s,接着11位储存E,剩下的52位储存M。

在内存中规定E的值在float类形下加上127double类型时加上1023,才能存储,因M的值小数点前都为1,所以1可以省略只写小数点后的值,数据取出时给E减127或1023,再给M加1即可。

float a=5.5;
则可以写成 0 01000000 10110000000000000000000   
          s     E       M
                
当 E全为0时

真正的E=0-127=-127,有效数字M不在加1,这时浮点数无限接近于0。

0  0000000000   1011000000000000000000

当E全1时,M全为0

0   111111111111     0000000000000000000000

这时数字无穷大。

可能出现的问题

尽管计算机能够准确表示大多数整数和浮点数,但在进行数值运算时可能会出现精度丢失的问题。这是由于某些浮点数无法用有限的二进制小数表示形式精确表示而导致的。

在程序设计时,我们需要注意避免数值溢出和精度丢失的问题,可以通过合理选择数据类型、避免连续浮点运算、使用高精度计算库等方法来尽量减少这些问题的发生。

总结

总的来说,了解整数及浮点数在内存中的存储方式是非常重要的,它可以帮助我们更好地理解计算机是如何处理数值数据的,并且在编写程序时能够更加准确地控制数值计算的精度和准确性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值