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

(本文使用的编译器为小端存储编译器,内存显示为4列)

一、整数在内存中的存储

(一)无符号整数

无符号整数在内存中的存储很简单,就是将输入的数据直接转换为二进制进行存储。

例如存储数据19:

转换为二进制序列为:

0000 0000 0000 0000 0000 0000 0001 0011

此序列就是在内存中的存储结果

(实践)二进制转换为16进制,再通过小端存储方式显示:

存储数据10086:

转换为二进制序列为:

0000 0000 0000 0000 0010 0111 0110 0110

此序列就是在内存中的存储结果

(实践)二进制转换为16进制,再通过小端存储方式显示:

(二)有符号整数

有符号整数在内存中以二进制补码的形式储存,而我们输入的数据直接转化为二进制实际上得到的是二进制原码,所以此处把正数和负数分开讨论

1.正数

原码反码补码相同,存储方式与无符号整数完全相同,但是二进制第一位是符号位0,存储的数值范围比无符号整数小。

2.负数

原码符号位不变,其他位取反得到反码,反码+1得到补码,

例如存储-4

原码:1000 0000 0000 0000 0000 0000 0000 0100

反码:1111 1111 1111 1111 1111 1111 1111 1011

补码:1111 1111 1111 1111 1111 1111 1111 1100

其中1111 1111 1111 1111 1111 1111 1111 1100就是其在内存中的存储结果

(实践)二进制转换为16进制,再通过小端存储方式显示:

二、浮点数在内存中的存储

浮点数在内存中的存储依托于科学计数法,与整数在内存中的存储截然不同

IEEE规定标准754对浮点数在内存中的存储进行了规定,任何一个二进制浮点数可以写成以下格式

其中S控制符号位

M表示有效数字,其值介于1和2之间

2^E表示指数位,E就是二进制数M小数点挪动使自身介于1到2之间的位数(科学计数法)

(一)32位float类型

float类型占用4字节,即32个bit位

1位储存S,8位存储E,23位存储M

1.存S

没什么好说的,0为正,1为负

2.存E

E为8位,取值在0-255之间,此处需要将E加上中间值127(因为E可以有负数,所以为了平衡这一问题,E需要加上中间值)再转换为二进制

3.存M

将M前面的整数1忽略,只存1小数点后面的后面的数

(二)64位double类型

1.存S

没什么好说的,0为正,1为负

2.存E

E为11位,取值在0-2047之间,此处需要将E加上中间值1023(因为E可以有负数,所以为了平衡这一问题,E需要加上中间值)再转换为二进制

3.存M

将M前面的整数1忽略,只存1小数点后面的后面的数

(三)例题:

float存储数据5.5

首先转化为二进制101.1

由此判断

S=0

M=1.011

E=2

因此可以确定存储为

0 10000001 01100000000000000000000

(实践)二进制转换为16进制,再通过小端存储方式显示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值