当前位置:网站首页>C语句:数据存储
C语句:数据存储
2022-08-11 04:52:00 【某某小卢】
目录
浮点数(float和double)在系统中的存储方式和取出方式
我们了解E的存储形式,能存进去就可以取出来,那怎么取出来呢?
数据的存储
数据类型介绍
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
上面的二进制为二进制的原码。第一位为符号位:0为负,1为正
反码为除了符号位,原码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了,我们可以啦解决一些之前的那个问题了啊

边栏推荐
猜你喜欢

0 Basic software test for career change, self-study for 3 months, 12k*13 salary offer

论文笔记:Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks

form表单提交数据库中文变成问号

应用层协议——DNS

findViewById返回null的问题

Do you understand how the Selenium automated testing framework works?

2022新员工公司级安全教育基础培训(118页)

Harvesting of radio frequency energy

嵌入式分享合集33

ALSA音频架构
随机推荐
澳大利亚网络空间安全体系建设论析
Object Creation and Display Transformation
Layered Architecture & SOA Architecture
洛谷P6586 蒟蒻火锅的盛宴
【服务器安装mysql】centos7下使用mysql离线安装包安装mysql5.7
ALSA音频架构 -- snd_pcm_open函数分析
二叉堆的基础~
Embedded Sharing Collection 33
交换机和路由器技术-29-OSPF虚链路
在 关闭页面/卸载(unload)文档 之前向服务器发送请求
洛谷P4032 火锅盛宴
1815. Get the maximum number of groups of fresh donuts state compression
Mysql: set the primary key to automatically increase the starting value
ERROR: Could not install packages due to an OSError: [Errno 2] 没有那个文件或目录: ‘/data/xxxx
交换机和路由器技术-24-OSPF单区域配置
ALSA音频架构
02.折叠隐藏文字
【服务器安装Redis】Centos7离线安装redis
-Fill in color-
【FPGA教程案例50】控制案例2——基于FPGA的PD控制器verilog实现