当前位置:网站首页>数据的储存
数据的储存
2022-07-02 05:11:00 【聪明的骑士】
目录
一、数据类型
1.基本内置类型
char | 字符型 | 1byte | %c |
short | 短整型 | 2bytes | %d |
int | 整形 | 4bytes | %d |
long | 长整型 | >=4bytes | %ld |
long long | 更长的整形 | 8bytes | %lld |
float | 单精度浮点型 | 4bytes | %f |
double | 双精度浮点型 | 8bytes | %lf |
类型的意义:
(1)使用这个类型开辟内存空间的大小
(2)如何看待内存空间的视角
2.数据类型的基本归类
类型集合名称 | 数据类型 |
整形家族 | char unsigned char signed char |
short unsigned short signed short | |
int unsigned int signed int | |
long unsigned long signed long | |
浮点数家族 | float |
double | |
构造类型 | 数组类型 |
联合类型 union | |
结构体类型 struct | |
枚举类型 enum | |
指针类型 | int *pi; |
char *pc; | |
float* pf; | |
void* pv; | |
空类型 | void |
二、整型在内存中的存储
1.原码、反码、补码
计算机中的整数有三种2进制表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,左边的第一位二进制位为符号位,用0表示数字为正,用1表示数字为负。
非负整数的原、反、补码都相同,负整数的原、反、补码遵循以下规则。
(1)原码:直接将数值按照正负数的形式翻译成二进制就可以得到原码。
(2)反码:原码除符号位全部按位取反。
(3)补码:反码加一得到补码。
对于整形来说:数据存放内存中其实存放的是补码,并且在处理器运算中进行处理的也是补码。
并且,神奇的是,如果你用同样的方式处理负数的补码,它又会变回原码。
果然,还是我的智商不够用了。
2.大小端存储
(1)大小端存储的定义
大端(存储)模式:指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
小端(存储)模式:指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
数据低位与高位:1000000000000
(2)大小端储存的方式
我们在C代码中定义一个int类型的变量a,并观察一下内存中的数据储存情况。
这就是整形数据的大小端存储方法,虽然存储方式不同但是在使用变量时编译器会按顺序还原数据,但通过指针修改变量时并不会按顺序重组数据。
数据的存储方式只与电脑硬件设备有关,对于我们平常接触到的计算机而言,绝大部分都遵循小端存储方式。
3.笔试题
判断当前机器的大小端
#include<stdio.h>
int main()
{
printf("小端\n");
return 0;
}
//没了
//▄︻┻┳═一…… *(>○<)
//救命呀,我不皮了!!!!!!
//真代码:╰(*°▽°*)╯
#include<stdio.h>
int check_sys()
{
int i = 1;
//0000 0000 0000 0000 0000 0000 0000 0001
//大端存储:0x 00 00 00 01 解引用->0
//小端存储:0x 01 00 00 00 解引用->1
return (*(char*)&i);
//&i取出i的地址,然后把这个int*类型的地址转化为char*,最后解引用
//为大端存储,返回0;小端存储,返回1
}
int main()
{
int ret = check_sys();
if (ret == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
三、浮点型在内存中的存储
1.储存规则
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以用以下公式表示:
- 公式:(-1)^S * M * 2^E
- (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
- M表示有效数字,大于等于1,小于2。
- 2^E表示指数位。
- 在float类型中,首比特位为符号位,后面8个比特位储存E,最后的23个比特位储存M
- 在double类型中,首比特位为符号位,后面11个比特位储存E,最后的52个比特位储存M
2.储存示例详解
比如说,我们定义一个float变量,它的值为5.5
(1)确定符号位为0还是1
5.5是一个正数,所以符号位为0,也对应-1的0次方为1
(2)将该数字由十进制转化为二进制
其中从小数点向左的位数依次表示2的0次方,2的1次方,2的2次方等等;而从小数点向右的位数依次表示2的-1次方,2的-2次方,2的-3次方等等。也就是说,5.5可以表示为2的平方加2的0次方再加上2的-1次方:5.5 -> 101.1
(3)确定M与E的值
由于M是一个大于1小于2的数字,所以对于101.1可以看作1.011乘以2的平方,此时我们就确定了M=1.011,E=2,但是由于M大于1小于2的特性,M小数点前面的一不会储存在内存中,这样就可以最大利用空间来保证精度。
(4)E的存储
由于浮点型数据在储存E时只能存储为无符号整数,所以在浮点数类型中储存的E是它的计算值,计算值等于真实值加上中间值,在float类型中中间值为127,double类型中中间值为1023
E的真实值为2,变量为float类型,储存在内存中的值为129:10000001
这就是float类型的5.5的储存情况:
符号位(S) | 指数位(E) | 有效数字(M) |
0 | 10000001 | 01100000000000000000000 |
(5)我们在使用浮点型数据中经常会说到精度,就证明有些浮点型数据是不能在内存中精确储存的。
比如说,我们定义一个float类型的变量并化为二进制数:3.6 ->11.100110011001100110011001100110011001100110011001101
这个数字的M早就超过了可以存储的位数,这个数字就不能准确储存,这也是我们在在形容浮点数时强调精度的原因。
3.浮点型数据的取出
然而,指数E从内存中取出还可以再分成三种情况:
(1)E不全为0或不全为1
这时,浮点数就采用上面的规则表示,即先找到符号位,然后指数E的计算值减去127(或1023),得到真实值,再将
有效数字M前加上第一位的1。
(2)E全为0
这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,
有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于
0的很小的数字。
(3)E全为1
这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s)
边栏推荐
- 7.1 simulation summary
- Fabric.js 自由绘制矩形
- Lay the foundation for children's programming to become a basic discipline
- JS interview collection test question 1
- Mysql基础---查询(1天学会mysql基础)
- Application d'un robot intelligent dans le domaine de l'agroécologie
- 6.30 year end summary, end of student age
- php/js cookie共享跨域的问题
- Pyechart1.19 national air quality exhibition
- Paddlepaddle project source code
猜你喜欢
LeetCode 1175. Prime number arrangement (prime number judgment + Combinatorial Mathematics)
Johnson–Lindenstrauss Lemma(2)
Ansible installation and use
2022阿里巴巴全球数学竞赛 第4题 虎虎生威(盲盒问题、集卡问题)解决思路
Gee: explore the characteristics of precipitation change in the Yellow River Basin in the past 10 years [pixel by pixel analysis]
Mathematical knowledge (Euler function)
About PROFIBUS: communication backbone network of production plant
Fabric.js IText设置指定文字的颜色和背景色
[opencv] image binarization
Summary of database problems
随机推荐
No logic is executed after the El form is validated successfully
C # picture display occupancy problem
农业生态领域智能机器人的应用
ansible安装与使用
Disable access to external entities in XML parsing
Getting started with pytest ----- confitest Application of PY
Case sharing | intelligent Western Airport
Mysql重点难题(2)汇总
Domestic all Chinese automatic test software apifox
Record my pytorch installation process and errors
Leetcode basic programming: array
The El cascader echo only selects the questions that are not displayed
创新永不止步——nVisual网络可视化平台针对Excel导入的创新历程
Practical problem solving ability of steam Education
Pyechats 1.19 generate a web version of Baidu map
设置滚动条默认样式 谷歌浏览器
7.1模擬賽總結
Solution: the agent throws an exception error
js中的Map(含leetcode例题)
Global and Chinese market of pressure gauges 2022-2028: Research Report on technology, participants, trends, market size and share