您的位置:首页 > 其它

整型和浮点型在内存中存储方式

2017-12-14 23:16 190 查看

首先说明,由于我一直不喜欢大段的文字来说明一个概念,我比较喜欢用图来说明,但是最近比较忙,所以这一篇博客我不是很满意,如果你读到这篇博客,你看不懂,可以私我,我会在看博客的时候回复你,为你解答,也可以加我的QQ2651933495,我会用简单的画图来告诉你,互相学习,我以后会将这里的图片加上去,最近实在忙,期末考试了。。。。

基本概念

在内存中,类型决定了两点:

1、使用这个类型开辟内存空间的大小(大小决定了使用范围)

2、如何看待内存空间的视角尤为重要!!!

解释一下第二点:

比如定义了一个整型分配了四个字节,那么这四个字节访问的时候就以整型的眼光去看待这四个字节的序列

同理,其他类型的存的序列也以对应类型去看待

整数二进制序列

整型家族

char(1个字节)

int(4个字节)

short(2个字节)

long(8个字节)

所有字节长度均在VS2017环境下来讨论

因为标准并没有规定长度,由编译器决定

整数序列在内存中,以32位机器为例,一个int在内存中占4个字节,32位比特位,每一个比特位都用0、1表示

00000000 00000000 00000000 00000000

有符号int中,第一位是符号位,剩下的为表示大小部分

例如,9的二进制序列为:

00000000 00000000 00000000 00001001

而在内存中存的是补码:

原码—–>反码:符号位不变,其他位按位取反,得到反码

反码—–>补码:反码加一得到补码

内存中存的是补码:

1、正数的原码、反码、补码相同(标准规定的,别问我为什么。。)

2、内存中存的补码,运算的时候可以将符号位和其它位统一处理,减法也按加法来处理,CPU中只有加法运算器

浮点数的二进制序列

浮点型家族

float(4字节)

double(8字节)

根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数可以表示成如下形式

(−1)s∗2E∗M

类似于科学计数法,只不过这里是二进制的

第一部分符号位,表示正负,S为1为负,S为0为正

第二部分指数部分,2的E次

第三部分有效数字M(M是一个以1开头的二进制序列)

IEEE 754中规定:

float中:

符号位:0(1位)

指数部分:00000000(8位)

有效数字部分:0000000 00000000 00000000(23位)

double:

符号位:0(1位)

指数部分:0000000 0000(11位)

有效数字部分:0000 00000000 00000000 00000000 00000000 00000000 00000000(52位)

IEEE 754 中的特殊规定:

1、在存储有效数字时,这个序列的第一位默认记为1,也就是说一个数表示为1.xxxxxx,这个数类似于科学计数法,不过他是二进制的存储的时候去掉首位,再存入,取出的时候先加上首位1,再重新算回十进制

例如:

浮点数5,序列1.01,存入时存入01,他的二进制序列即010000000(一共23位)

这样省去的一位的做法,实际可以存24位有效数字

2、由于科学计数法中指数部分是有负数的,但是E是一个无符号数,所以在存入E的时候,往往不是直接存E,而是将E加上一个中间数,8位的指数最大能表示255,则中间数为127,假设有一个指数是十次,则存入的其实是137,二进制序列就是10001001,-10存入的就是127,二进制为01111111
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储 二进制 内存