文章目录

  • 前言
  • 类型的基本分类
    • 整型
    • 浮点数
    • 自定义类型
  • 整型在内存中的存储
    • 原码、反码、补码
    • 大端和小端
    • 如何判断编译器是大端还是小端
  • 浮点数在内存中的存储
  • 总结

前言

C语言中有char、short、int、long、long long、float和doubole这些数据类型。这些数据类型也叫内置类型
所占存储空间的大小:

数据类型 所占存储空间的大小
char 1个字节
int 4个字节
short 4个字节
long 4个字节
long long 32位平台下占4个字节 ,64位平台下占8个字节
float 4个字节
double 8个字节

类型的基本分类

整型

整型一共有char、int、short、long和long long这五种类型
char类型的数据在内存中存放的是ASCII码值,是整型,所以也被当成整型。
这些整型都分为有符号的整型和无符号的整型,具体可以看下面:

 int a = 5;signed int b;//有符号的整型unsigned int c;//无符号的整型

signed是有符号的,unsigned是无符号的。
平时我们定义变量时,一般都不会加前面,只是int 变量名 = 数据,其实这就相当于signed int 变量名 = 数据。
注意 \color{#FF0000}{注意} 注意 :但是char这个类型比较特殊,在C语言的标准中,没有定义char到底是有符号的还是无符号的,取决于编译器
关于无符号和无符号:
前面我们说到了int类型在内存中占4个字节,1个字节就是8个bit。

比特位即bit,是计算机最小的存储单位。以0或1来表示比特位的值(二进制表示)。

10的二进制序列就如图所示,其中第一位是符号位,0代表正数,1代表负数

浮点数

浮点数有float和double,一般用来表示小数。
float的表示精度低,存储数值范围较小。
double的表示精度高,存储数值范围较大。

自定义类型

自定义类型有数组类型、结构体类型、枚举、联合体、指针类型和空类型(void)。在这就不一一详细讲了。

整型在内存中的存储

在了解整型在内存中的存储前,先了解一个计算机的原码、反码、补码。

原码、反码、补码

数值表示形式有:二进制、八进制、十进制和十六进制。
整数的二进制也有三种表达形式:原码、反码、补码。
整数中:
正数的原码反码补码相同
负数的原码反码补码是需要计算的

原码:整数的二进制序列(注意符号位)
反码:符号位不变,其它位按位取反就是反码(0变1,1变0)
补码:反码加1就是补码

整型在内存中存放的是补码

接下来来验证内存中存放的是补码:

我定义了一个a变量,值为-10. 原码反码和补码也给大家了,因为正整数的原码、反码和补码相同,所以不用正整数验证。接下来让我们来用编译器来调试并监视来观察内存,来看看整型在内存中是如何存储的。

看上图,虽然这里面看到的是十六进制,但不要认为是以十六进制存储的,但本质存的还是二进制序列。由此我们可以得出内存中存放的是补码。

大端和小端

我们看到上图a的地址和我们写的十六进制序列是反着的,为什么?这就是大小端的问题了。

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址
中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地
址中。

如何判断编译器是大端还是小端

int main()
{int a = 1;if(*(char*)&a == 1){printf("小端")}else{printf("大端")}
}

如果是小端存储存储的顺序应该是01 00 00 00 大端的话是00 00 00 01
我们对a进行取地址,然后强转成char类型的指针然后再进行解引用,因为强制类型转换了,所以只能访问1个字节的地址,如果得到的1就是小端,0就是大端。

浮点数在内存中的存储

根据国际标准IEEE(电气和电子工程协会)754,一个浮点数 (Value) 的表示其实可以这样表示:

也就是浮点数的实际值,等于符号位(sign bit)乘以指数偏移值(exponent bias)再乘以分数值(fraction)。

简单来说就是对于浮点数在内存中的存储,无论是float(32位浮点数)还是double(64)位浮点数(S),都有符号位(Exp),指数位和有效数字位(Fraction)。

对于float这种32位浮点数来说,指数位占8个bite位,有效数字位占23个bite位
对于double这种64位浮点数来说,指数位占11个bite位,有效数字位占52个bite位
符号位都是占1个bite位。
其中因为浮点数的小数部分,用二进制中难以存储,就会存在精度不准的问题。

单精和双精浮点数的有效数字分别是有存储的23和52个位,加上最左手边没有存储的第1个位,即是24和53个位。

由以上的计算,单精和双精浮点数可以保证7位和15位十进制有效数字。

总结

对于数据在内存中的存储,大家还是要重点掌握原码、反码和补码的,要会计算,然后是浮点数的存储方式,可以把它当成一个拓展知识来了解,拓展一下眼界,如果真要熟练掌握浮点数的存储规则是要研究很多东西的,大家感兴趣也可以去看一下国际标准IEEE754。

【C语言】全面解析数据在内存中的存储相关推荐

  1. C语言—深度剖析数据在内存中的存储

    深度剖析数据在内存中的存储 数据类型介绍 类型的基本归类 整形在内存中的存储 大小端介绍 整形在内存中的存储的相关练习 浮点型在内存中的存储 浮点型在内存中的存储相关介绍 数据类型介绍 内置类型(C语 ...

  2. C语言——深度剖析数据在内存中的存储

    大家好!我是保护小周ღ,本期为大家带来的是深度剖析数据在内存中的存储,不知道,大家学了这么久C语言,有没有想过一个问题,我们在程序设计中的数据是怎么在计算机中存储的?我们都知道 一个整型数据 int ...

  3. 【C语言】浮点型数据在内存中的存储方式

    目录 一. 前言 二. 问题的引出 三. 两类浮点型数据(float.double)在内存中的存储方式 3.1 两类浮点型数据的存储模型 3.1.1 浮点型数据数值读取的通用模型 3.1.2 floa ...

  4. C语言基础09——数据在内存中的存储。整型的存储、大小端讲解、浮点数的存储、杨辉三角、找凶手、猜名次

    目录 数据类型 基本内置类型 类型的基本分类 整型在内存中的存储 计算机中整数的三种表示方法:原码.反码.补码 大小端 练习 浮点型在内存中的存储 为什么以下程序输出结果与想象不同? 浮点数存储规则 ...

  5. C语言 深度剖析数据在内存中的存储

    目录 数据类型详细介绍 整形在内存中的存储:原码,反码,补码 大小端字节序介绍及判断 浮点型在内存中的存储解析 数据类型详细介绍 整形: 1.为什么char类型也会归类到整形家族当中去呢? 字符存储和 ...

  6. C语言 深度剖析数据在内存中的存储(2)

    本次博客是继上次博客,继续向下剖析数据在内存当中的存储. 练习 浮点型在内存中的存储 练习 代码1: int main() {char a= -1;signed char b=-1;unsigned ...

  7. 【C语言内功】“数据在内存中的存储“

    目录 一.字符串类型 二.字符储存的规则 三.void 四.原反补码(整型) 1.原反补(正负数)的表示方式: 2.原反补码的相互转换规则: 五.计算机实现减法的方式 六.数据的存储,是以字节为单位( ...

  8. 【C语言】深度解析数据在内存中的存储(C语言代码为例)

  9. 【C语言】浮点型数据在内存中的存储

最新文章

  1. Python中的高阶函数sorted
  2. linux系统路由功能记录
  3. linux隐藏特定进程,linux 隐藏进程
  4. 为啥不用ActiveRecord
  5. .net byte转java byte_「Java知识收集整理」Java语法的基础
  6. 华为推出首款折叠屏5G手机;微信“上车”时间已定;社区团购暗潮涌动
  7. QQ空间相册批量下载qq相册批量下载专家比骨头小林还厉害
  8. 萝卜小姐-Handler之系列sendMessage学习
  9. linux 光功率 模块_光模块基本参数-消光比/光功率/灵敏度
  10. 理解h5文件并使用python对h5格式文件进行读写操作
  11. 微信-软件 报警信息
  12. 校验字符串是否是汉语拼音
  13. 8、ABPZero系列教程之拼多多卖家工具 添加手机注册登录功能
  14. 笔记本html外接显示器,笔记本怎样外接显示器 笔记本外接显示器方法【详解】...
  15. 云服务器-异地部署集群服务-Kubernetes(K8S)-网络篇
  16. 华为与H3C的前世今生-昊群计算机
  17. JAVA 基础学习第一天
  18. 更多推薦:蔡崇信、曾鳴、秦朔、闌夕、虞鋒、田溯寧
  19. 操作系统课程设计--在Linux环境下模拟实现简单命令解释器(C++代码)
  20. 达内学python_通过在达内学习python我的职场之路更加宽广了

热门文章

  1. SaaS的关键指标有哪些?7200字详解计算公式
  2. 【DB】有赞数据库自动化运维实践之路
  3. 网络教育要考计算机和英语作文,网络远程教育统考英语科目英语写作要怎么备考?要定期练习...
  4. 算法的trick_目标检测算法中的常见trick
  5. 被误删的手机短信息如何恢复?
  6. 凌晨3点不回家不心酸:程序员几个真实通宵时刻
  7. 接入微信电子发票java_接入微信电子发票流程步骤
  8. 未来式人工智能教育在国内的现状
  9. discuz发帖机-免费discuz发帖机
  10. Vitepress(一):基础教程