| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言的进阶之数据的存储 -> 正文阅读 |
|
[C++知识库]C语言的进阶之数据的存储 |
?(一)C语言的数据类型? 首先,C语言的数据类型有哪些呢(即内置类型) ? 整形大家族:(1)char? //字符数据类型 浮点型大家族:(1)float? //单精度浮点数 构造类型:(1)数组类型 指针类型:(1)int?*pi 空类型:void表示空类型,通常应用于函数的返回类型、函数的参数、指针类型。 ? ? ? ? ? ? ?例如调用函数的时候无参数时,写成Add(void),在传参时就会报错。
(二)整形在内存中的存储? 整形在内存中是以补码的形式存放的,对于正整数来说,它的源码,反码,补码相同。对于负整数来说,它的补码等于源码符号位不变,其它位按位取反,然后再末位加一。 ? 例如,int a = -1;在VS2019中查看a的内存如图,一个整形四个字节,一个字节八个比特位,这时候我们看到的存储方式是十六进制的,一个f在二进制下是1111,那么在二进制下,a的补码为11111111111111111111111111111111。 ? 按照按位取反,末位加一的规矩,a的反码为10000000000000000000000000000000,a的源码为10000000000000000000000000000001。 ? ?当int a = 0x11223344时,我们再来看内存,可以看到,从44到11,内存以字节为单位进行存放的时候,是从高地址向低地址存放的,像这样把一个数字的低位字节的内容,存放在内存的低地址处,把高位字节的内容存放在内存的高地址处,就是小端字节存储。与小端字节存储正好相反,大端字节存储把一个数字的低位字节的内容,存放在内存的高地址处,把高位字节的内容存放在内存的低地址处。 ? ? ? ? 那么,如何判断是小端字节存储还是大端字节存储呢?我们是这样来实现的。因为char类型的整形含两个字节,int类型的变量含四个字节,定义一个数为1,通过强制类型转换,int转换为char,如果是小端字节存储,在内存中为01 00 00 00,转换后为1,如果是大端字节存储,转换后则为0,通过判断取值来判断大小端字节存储。
? (三)浮点型在内存中的存储? 浮点型在fioat.h头文件中定义了浮点型的范围,浮点数在内存中是怎样存储的呢?我们可以先来看一个例子。
? 这个代码得到的结果是这样的。 ?浮点数的存储规则是怎样的?根据国际标准IEEE?(电气和电子工程协会) 754标准,?任意一个二?进制浮点数V可以表示成下面的形式: ????????●? (-1)^S*M*2^E ? 例如,一个浮点数数5.5,第一位小数相当于2的-1次方,写成二进制就是101.1,即(-1)^0*1.011*2^2,其中S=0,M=1.011,E=2。,S,M,E在内存中的占比是这样的。 ?因为规定M是大于1并且小于2的,所以在M中,默认第一位为1,所以只需要存小数点后面的位数就行了。E被解读成一个无符号数,但是实际上E也有可能是负数,对于这样的情况,IEEE 754规定,存入内存时必须加上一个中间数,对8位的E,加127,对11位的E,加1023。 ? 例如,存入5.5,S=0,M=1.011,E=2,得0 10000001 01100000000000000000000,转化为16进制为40 B0 00 00,可以观察到内存中就是此数。 ? 要从内存中取出E时,要分三种情况: ? ? ?(1)E不全为0或不全为1:即指数E的计算值减去127?(或1023)?,得到真实值,再将有效数字M前加上第一位的1。 这样就可以很好的解释前面的代码啦,(不足之处,欢迎大家指正)。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/26 15:56:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |