当前位置:网站首页>【张三学C语言之】—深入理解数据存储
【张三学C语言之】—深入理解数据存储
2022-07-02 06:12:00 【谢西山】
【张三学C语言之】—深入理解数据存储
一,数据类型
不同的数据类型代表了不同数据在内存中开辟的空间大小
eg:int 在内存中占4个字节
| 整 型 | 内容 注意:括号中的内容为每种类型所占的字节数 |
|---|---|
| 数据类型 | char(1字节) short(2字节) int(4字节) long(8字节) |
| 浮点型 | float (8字节) double(16字节) |
| 构造类型 | 数组类型 (内存大小自己开辟决定) 结构体 struct (遵守内存对齐) 枚举 enum(内存元素决定) 联合类型 union(最大的那个元素的) |
| 指针类型 | void 表示类型,通常用于函数的返回类型,函数的参数,指针类型 |
C语言没有字符串类型,所以用数组来存放字符串 eg:char[10]="abcdef"
二.整型数据在内存中的存储
1.源码,反码,补码
计算机中的符号已二进制的形式在内存中存储
数据在内存中已补码的形式存储
首位为符号位,其余位为数据位
0为正,1为负
源码:直接二进制按照正负数的形式翻译二进制即可
反码:符号位不变,数据位置取反
补码:反码+1
正数:源码=反码=补码
负数:以补码形式存储
eg:
正数
date:10
bin:00000000 00000000 00000000 00001010
源码=反码=补码=00000000 00000000 00000000 00001010
负数
date:-10
bin: 10000000 00000000 00000000 00001010
反码:11111111 11111111 11111111 11110101
补码:11111111 11111111 11111111 11110110
2.数据在内存中已补码的形式存储的原因
a.使用补码可以将符号位和数据域统一处理
b.CPU只有加法器,使用补码可以使加法和减法统一处理
3,数据存储
字节序:
概念:cpu对内存中的数据以字节为单位进行存取的顺序
因为内存的有高低地址之分,数据的二进制有高低位之分
主机字节序主要取决于cpu架构: X86-小端; MIPS-大端
字节序主要是在网络通信时,不同主机之间的通信,如果字节序不同会造成数据二义
分类:int=0x11223344
大端存储:低地址存高位 内存中的存放11 22 33 44
小端存储:低地址存低位 内存中的存放44 33 22 11
注:大小端在面试和考试中是高频考点,想要了解更多点击下方链接了解。
三.浮点型数据在内存中的存储
1,IEEE754 标准文档规定,任意一个浮点数在内存中的表示分三部分
| 符号 | 单精度浮点数每一位所占内存 | 双精度浮点数每一位所占内存 |
|---|---|---|
| s—符号位 | 1个比特位 | 1个比特位 |
| E—指数位 | 8个比特位 | 11个比特位 |
| M—尾数 | 23个比特位 | 52个比特位 |
浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。
数符占 1 位二进制,表示数的正负。0表示正,1表示负
指数符占 1 位二进制,表示指数的正负。
尾数表示浮点数有效数字,0.xxxxxxx, 但不存开头的 0 和点。
指数存指数的有效数字。
指数占多少位,尾数占多少位,由计算机系统决定。

两种特殊情况:
E为全0:这时候真实指数值是1-127=-126,M表示真实值,通常用于表示正负0
E为全1:这时候真实指数值是255-127=128,M为全0时表示正负无穷大
2.取值范围
| 类型 | 比特数 | 有效数字 | 数值范围 |
|---|---|---|---|
| float | 32 | 6-7 | -3.410(-38)~3.410(38) |
| double | 64 | 15-16 | -1.710(-308)~1.710(308) |
| long double | 128 | 18-19 | -1.210(-4932)~1.210(4932) |
如果存储比精度更重要,请考虑对浮点变量使用 float 类型。相反,如果精度是最重要的条件,则使用 double 类型。
浮点变量可以提升为更大基数的类型(从 float 类型到 double 类型)。当您对浮点变量执行算术时,通常会出现提升。此算术始终以与具有最高精度的变量一样高的精度执行。
float f_short;
double f_long;
long double f_longer;
gf_short = f_short * f_long
在前面的示例中,变量f_short提升到类型 double 并且与f_long相乘;然后,结果舍入到类型 float,然后赋给f_short。
3.应用示例分析
在 C 和 C++ 中,如下赋值语句:
float a=0.1;
编译器报错:warning C4305: ‘initializing’ : truncation from 'const double ’ to 'float ’
原因:在 C/C++ 中,上述语句等号右边 0.1,认为是个 float,但是编译器却把它认为是个 double(因为小数默认是 double),所以要报这个 warning,一般改成0.1f就没事了。
欢迎各位来交流,如果觉得有用的话,记得评论+收藏+关注哦!喵~~
今日垃圾话:长大之后才明白,世上无难事,只怕有心人。
边栏推荐
- Monitoring uplink of VRRP
- VLAN experiment of switching technology
- Sudo right raising
- 495. Timo attack
- Ti millimeter wave radar learning (I)
- VRRP之监视上行链路
- Web components series (VIII) -- custom component style settings
- Contest3147 - game 38 of 2021 Freshmen's personal training match_ E: Listen to songs and know music
- 如何使用MITMPROXy
- Invalid operation: Load into table ‘sources_orderdata‘ failed. Check ‘stl_load_errors‘ system table
猜你喜欢

LeetCode 90. Subset II

Jetpack Compose 与 Material You 常见问题解答

穀歌出海創業加速器報名倒計時 3 天,創業人闖關指南提前收藏!

官方零基础入门 Jetpack Compose 的中文课程来啦!

Step by step | help you easily submit Google play data security form

500. Keyboard line

Common means of modeling: combination

CNN visualization technology -- detailed explanation of cam & grad cam and concise implementation of pytorch

From design delivery to development, easy and efficient!

BGP中的状态机
随机推荐
Detailed steps of JS foreground parsing of complex JSON data "case: I"
Detailed notes of ES6
Brain and cognitive neuroscience matlab psychoolbox cognitive science experimental design - experimental design 4
No subject alternative DNS name matching updates. jenkins. IO found, the reason for the error and how to solve it
The real definition of open source software
LeetCode 40. Combined sum II
Community theory | kotlin flow's principle and design philosophy
标签属性disabled selected checked等布尔类型赋值不生效?
CNN visualization technology -- detailed explanation of cam & grad cam and concise implementation of pytorch
Flutter 混合开发: 开发一个简单的快速启动框架 | 开发者说·DTalk
Contest3147 - game 38 of 2021 Freshmen's personal training match_ G: Flower bed
Jetpack Compose 与 Material You 常见问题解答
VLAN experiment of switching technology
LeetCode 83. 删除排序链表中的重复元素
Browser principle mind map
LeetCode 283. 移动零
神机百炼3.54-染色法判定二分图
Don't use the new WP collection. Don't use WordPress collection without update
神机百炼3.53-Kruskal
LeetCode 90. 子集 II