irpas技术客

C语句:数据存储_某某小卢

irpas 1977

目录

数据的存储

数据类型介绍

二进制的原码,补码以及反码

对于整形来说:数据存放内存中其实存放的是补码。

大小端介绍

什么大端小端:

例题

运用整形提升的场景

无符号类型整数打印可能会出现的问题

浮点数(float和double)在系统中的存储方式和取出方式

我们先来了解一下浮点数的存储方式

我们了解E的存储形式,能存进去就可以取出来,那怎么取出来呢?

E不全为0或不全为1

E全为0

E全为1


数据的存储 数据类型介绍

char ????//字符数据类型

short ???//短整型

int ????//整形

long ????//长整型

long long ?//更长的整形

float ???//单精度浮点数

double ???//双精度浮点数

将类型再进行基本分类

可以分为整形,浮点型,构造类型,以及指针和空类型

char分为3种,char unsigned char和 signed char

signed是有符号类型的,unsigned是无符号类型的。这里的符号指的是正负号。

unsigned是每一位都是数据位,而没有符号位

二进制的原码,补码以及反码

二进制由0和1组成

二进制是这样的。以15为例(32位):

000000000000000000000000001111;这里的四个1分别对应:2的3次方?2的2次方?2的1次方?2的0次方

二进制转换为10进制是这样的:2的3次方*1+?2的2次方*1+?2的1次方*1+?2的0次方*1=15

上面的二进制为二进制的原码。第一位为符号位:1为负,0为正

反码为除了符号位,原码0?1互换,0变1,1变0

补码是反码加1,逢二进一

其中值得注意的是正整数的原反补码都相同

对于整形来说:数据存放内存中其实存放的是补码。

为什么呢?

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统

一处理;

同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程

是相同的,不需要额外的硬件电路。

这里比较关键的是:整形数据在存储和计算的时候运用的都是二进制的补码,而打印的时候运用的是原码

大小端介绍 什么大端小端:

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址

中;

小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地

址中

我们window系统,用的是小段存储模式

例题 运用整形提升的场景

无符号类型整数打印可能会出现的问题

浮点数(float和double)在系统中的存储方式和取出方式

由这个题目可以知道,整数和浮点数的存储方式,置于为什么,后面会有解释。

我们先来了解一下浮点数的存储方式

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

(-1)^S * M * 2^E

(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。

M表示有效数字,大于等于1,小于2。

2^E表示指数位

图中就是二进制浮点数的存方式

而浮点数分为float型和double型

浮点数的S M E这三个别以这样的比例在这个存储方式存储在计算机中

IEEE 754对有效数字M和指数E,还有一些特别规定。

前面说过, 1≤M

IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的

xxxxxx部分。比如保存1.01的时

候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位

浮点数为例,留给M只有23位,

将第一位的1舍去以后,等于可以保存24位有效数字。

我总结一下上面这一段的文字:浮点数中M这一部分,因为M肯定是1

所以存储的时候整数位不存储,这样就空出来一位,可以继续存储一位小数,这样会更精准。

而当要用这个变量的时候,系统再将这个整数1加上去就好了啊。

至于指数E,情况就比较复杂。

首先,E为一个无符号整数(unsigned int)

从上面我们可以知道,E其实是一个指数,所以E可能会是负数,但他这边规定E是无符号整数,这里冲突了怎么办呢?

我们这边对应的处理方法:

我们在float的存储模式中发现E有八位,而double有11位。

E而我们的E只有一位,我们需要把E转换为二进制放进去,这里就有可以操作的地方了啊

规定:float型.将E的值加上127在转换成二进制,就是E是负数也可以变为正数,然后进行转换。

double型.将E的值加上1023在转换成二进制,就是E是负数也可以变为正数,然后进行转换。

我们了解E的存储形式,能存进去就可以取出来,那怎么取出来呢?

有三种情况

E不全为0或不全为1

这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将

有效数字M前加上第一位的1。

E全为0

其实E全为0就是先减到-127,这样的话E就变成-124,而2的-127次方就非常非常小,无线接近0.

E全为1

这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);

ok了,我们可以啦解决一些之前的那个问题了啊


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #C语句数据存储 #C语句数据存储方式和取出方式