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

本文详细解释了整数(包括正数和负数的原码、反码和补码存储)以及32位和64位浮点数的存储结构,涉及符号位、指数位和有效数字,并介绍了浮点数存储时的小数位处理和特殊情况的解读。
摘要由CSDN通过智能技术生成

前言:

整数有原码,反码,补码,而整数在计算机中存储的是二进制补码,所以我们得求出一个整数的补码,才能得知1它是如何如何在内存中存储的。

1.整数存储

这里以int类型为例:一个int类型的整数有4个byte,32个bit,它的最高位为符号位:正数为0,负数为1.

(1)正数:

原码==反码==补码

eg:20:

原码:00000000  00000000  00000000  00010100

反码:00000000  00000000  00000000  00010100

补码:00000000  00000000  00000000  00010100

故20在计算机中存储为00000000  00000000  00000000  00010100

(2)负数:

原码:原码

反码:除符号位以外,其他为按位取反(~)

补码:反码+1

eg:-20:

原码:10000000  00000000  00000000  00010100

反码:111111111  111111111  111111111  11101011

补码:111111111  111111111  111111111  11101100

故-20在计算机中存储为111111111  111111111  111111111  11101100

2.浮点数存储:

任意一个浮点数V都可以表示成下面的形式:

V = (-1)^{S} * M * 2^{E}

(-1)^{S}——>表示符号位,s=0表示为正数,s=1,表示为负数

M——>表示有效数字,是大于等于1小于2的(1 <= M < 2

2^{E}——>表示指数位

而浮点数存储又分为32位浮点数存储(float类型)和64位浮点数存储(double类型)

(1)32位存储:

对于32位的浮点数:最高位存储的是符号位S(1bit),其次存储的是指数E(8bit),然后存储的才是有效数字M(23bit)

(2)64位存储:

对于64位的浮点数:最高位存储的是符号位S(1bit),其次存储的是指数E(11bit),然后存储的才是有效数字M(52bit)

3.对于M与E的规定:

(1)M:

在计算机内部保存M的时候,默认这个数的第一位为1,因此可以被舍去,只保存后面小数部分。例如:在保存1.01的时候,就只保存01,等到读取的时候再把第一位的1加上去,这样做的目的:节省1位有效数字。

(2)E:

E是一个无符号整数(8bit:0~255,11bit:0~2047),对于8位bit的E,在保存E的时候需要在原来E的基础上加上127;对于11bit的E,在保存E的时候需要在原来的基础上加上1023。例如:2^{10} 

(float类型数据)的E为10,但在存储的时候会加上127,则E变为137,存储为01001001。

4.浮点数的读取: 

(1)E全为0:

说明E原先可能为-127或者-1023,这代表该浮点数是一个非常小的数

(2)E全为1:

说明E原先很大,这代码该浮点数是一个非常大的数

(3)E不全为1/不全为0:

例如:0.5的存储:

0.5的二进制形式:0.1 ==> 1.0 * 2^{-1} 

E为-1(+127后为126),S为0,M为1.0,但只存储小数部分:0

则0.5存储形式为:0  01111110  00000000000000000000000

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值