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

本文介绍了整数在内存中使用补码存储,区分正负的方法,并详细解读了浮点数的IEEE754标准,包括符号位、指数和有效数字的表示。通过C语言示例展示了这些概念在实际编程中的应用。
摘要由CSDN通过智能技术生成

1.整数在内存中的存储

整数在内存中以二进制的补码的形式存储,但是正整数的原,反,补码都相同,负整数的原,反,补码各不相同。

1.有符号整数的三种表示方法均有符号位和数值位,在二进制序列中,最高位为符号位,剩余为数值位。

2.符号位0表示正,1表示负。

原码:直接将数值按正负数的形式翻译成二进制所得到的。

反码:将原码的符号位不变,其余位依次按位取反得到的。

补码:反码+1得到的。

原码,反码,补码的关系如下图所示:

 2.浮点数在内存中的存储

根据国际标准IEEE754,任意一个二进制浮点数V可以表示为:

v=(-1)^s*M*2^E

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

2.M表示有效数字(1<=M<2)。

3.2^E指位数(2的E次方)。

eg:十进制5.5写成二进制为101.1相当于1.011*2^2,写成v的形式为v=(-1)^0*1.011*2^2。

 1.IEEE754规定:

1.对于32位的浮点数(float)最高一位存储符号位s,接着8位存储指数E,剩下的23位存储有效数字M。

 2.对于64位的浮点数(double)最高一位位符号位s,接着11位存储指数E,剩下的52位存储有效数字M。

 2.浮点数存的过程

1.

IEEE754对有效数字M和指数E有些特殊的规则,前面说过1<=M<2,M可写为1.xxxxxx的形式,计算机在保存M时,默认这个数的第一位总是1,因此可以被舍弃,只保存小数点后面的数字,等到读取时,再把第一位的1加上去,这样做是为了节省一位有效数字,以32位为例,留给M只有23位,舍弃一位时,可以保存24位有效数字。

2.

首先E为一个无符号整数,这意味着E如果为8位,取值范围为0—255,如果为11位,取值范围为0—2047,但是,我们知道科学计数法中,E可以是负数,因此IEEE754规定,存入内存的E的真实值必须加上一个中间值,8位的E中间值位127,11位的E中间值为1023,比如2^10的E为10,保存为32位时为10+127=137,即10001001.

3.浮点数取的过程

1.E不全为0或1

这时,浮点数就采用下面的规则表示,指数E-127或1023得到真实值,再将有效数字M+1.

2.E全为0

这时,指数E等于1-127或1-1023得到的即为真实值,这是有效数字M不再加1,而是还原为0.xxxxxx的小数,这样做是为了表示正负0,以及接近0的很小的数字

3.E全为1

这时,如果有效数字M全为0,则表示正负无穷大(正负取决于s)。

3.例题

代码需要自取:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 9;
	float* p = &n;
	printf("%d\n", n);
	printf("%f\n", *p);
	*p = 9.0;
	printf("%d\n", n);
	printf("%f\n", *p);
	return 0;
}

 下面画图解释输出结果:

4.总结:从上面我们可以知道,整数和浮点数在内存中的存储方式是不同的。

码字不易,请留下点赞,评论和关注吧!雯雯文下次和大家再见咯! 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值