数据在内存中的储存

在C语言中,数据在内存中的存储并不是每个数字都是精确储存,有些浮点数会采用约等于的方式存储,接下来我们就来讲讲在计算机内存存储中整数和浮点数的区别。

首先整数在内存中的时使用二进制的方式存储,整数二进制有三种表示方法,即原码、反码和补码。

三种方式第一个位置称为符号位,0表示“正”,1表示“负”。除第一个符号位以外,剩下的均是数值位。

那么原码、反码和补码是什么呢?

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

反码:将原码的符号位不变,其他数值位一次取反。

补码:反码基础上+1得到补码。

浮点数在内存中的存储相对整数来说稍微麻烦一点点

#include <stdio.h>
int main()
{
	int n = 9;
	float* pFloat = (float*)&n;
	printf("n的值为:%d\n", n);
	printf("*pFloat的值为:%f\n", *pFloat);
	*pFloat = 9.0;
	printf("num的值为:%d\n", n);
	printf("*pFloat的值为:%f\n", *pFloat);
	return 0;
}

在这里插入图片描述
这个代码可以充分的说明浮点数和整数在内存中存储的区别。
我们存进整数,强制转换为浮点数取出,这里得到的结果则为0.000000,以浮点数存入9.0,使用整数取出拿到的则是1091567616。

接下来我们就详细的讲一下浮点数在内存中是如何存放的:
根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
V = (−1)^S * M * 2^E
• (−1)S 表⽰符号位,当S=0,V为正数;当S=1,V为负数
• M 表⽰有效数字,M是⼤于等于1,⼩于2的
• 2^E 表⽰指数位
举例来说:
⼗进制的5.0,写成⼆进制是 101.0 ,相当于 1.01×2^2 。
IEEE 754规定:
对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M.
对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M
float类型的浮点数储存:
在这里插入图片描述
double类型的浮点数储存:
在这里插入图片描述
在内存空间中按照相应的比特位存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值