ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【C语言】数据的存储 希望帮到大家哟~~~

2022-03-03 00:02:53  阅读:217  来源: 互联网

标签:存储 反码 符号 补码 C语言 浮点 希望 原码


目录

数据类型

类型的基本分类

整形在内存中的存储:原码 反码 补码

内存中大小端存储模式

浮点型

深度剖析浮点型的存储方式

补充


数据类型

char 字符数据类型

short 短整型

int 整型

long 长整型

long long 更长的整型

float 单精度浮点型

double 双精度浮点型

所占内存空间大小:

(编译器为VS2019)

类型的基本分类

 

 这里需要注意的是char到底是unsigned char 还是 signed char 取决于编译器,其余的不加unsigned都默认为signed类型。

注:unsigned:无符号类型   signed:有符号类型  二进制最高位为符号位 

 

 空类型

void表示空类型

void 通常用于函数的返回类型 ,指针类型 ,  函数的参数 

整形在内存中的存储:原码 反码 补码

整形在内存中存储的是补码

原因: 补码可以统一处理符号位和数值域,同时还可以统一处理加法和减法运算(CPU只有加法器),且补码和原码相互转换的过程,其运算过程相同,不需要额外的硬件电路

对于有符号类型来说:最高位表示符号位  0代表正  1代表负

正整数:

原码反码补码相同

负整数:

原码:将数字用二进制表示

反码:原码中的符号位不变,其他位按位取反可得反码

补码:反码+1

(以上所说均为有符号类型)

注:存储的是补码,打印的是原码

      

内存中大小端存储模式

大端存储:数据的低位存储到高地址处,数据的高位存储到低地址处

小端存储:数据的低位存储到低地址处,数据的高位存储高地址处

在内存中 从左向右,地址由低到高

 

浮点型

float        单精度浮点型

double    双精度浮点型(更加精确)

深度剖析浮点型的存储方式

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

S:符号位  0代表正数 1代表负数

M:有效数字 , 大于等于1小于等于2

E:指数位

对于M的存储: 

我们知道M的取值范围为  M>=1&&M< 2  所以肯定是1.xxxxxx,为此我们可以省略保存1的空间全部保存小数点后的数字,这样可以存储更大的数字,更加的节省空间

对于E的存储:

E为无符号类型整数  因此E如果为8位取值范围是0~255  如果为11位 取值范围是0~2047

但是  考虑到E可能为负数  例如:0.5   E为 -1   因此 存入E的真实值之前需要加上一个中间数 

E位8位时,这个中间数为127; E为11位时,这个中间数为1023

例如:

0.5 // 二进制  0.1  ( 2^(-1) = 0.5 )

(-1)^0 * 1.0 * 2^( -1 )

S = 0 ;  E = -1 + 127 = 126 ; M = 1.0

0  01111110  00000000000000000000000

从内存中把E取出有以下三种情况

①E不全为0也不全为1

E先减去127得到真实值,然后再加上有效数字M前第一位的1

②E为全0

此时 1-127 即为E的真实值,而且还原M时不再填补第一位的1,而是写成0.xxxxx的形式,

因为2^(-126)是非常小的数字,无限趋近于0

③E为全1(此时E = 255)

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

即便M不全为0,2^255 * 1.xxxxx的值也是一个很大的数字

补充

浮点数存储会出现不精确的情况,因此我们比较浮点数时,例如 计算结果x的值是否等于2.1

判断条件不能写成 x == 2.1我们要把判断条件换成x的值是否在误差范围之间

例如: x - 2.1 > 0.1  ——误差范围是否在0.1之间 这样来判断结果是否相等

标签:存储,反码,符号,补码,C语言,浮点,希望,原码
来源: https://blog.csdn.net/weixin_55719365/article/details/123235524

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有