当前位置: 首页 > news >正文

C语言第15课—数据在内存中的存储

文章目录

  • 1. 整数在内存中的存储
  • 2. 大小端字节序和字节序判断
  • 3. 整数存储练习
    • 3.1 练习1
    • 3.2 练习2
    • 3.3 练习3
    • 3.4 练习4
    • 3.5 练习5
  • 4. 浮点数在内存中的存储
    • 4.1 浮点数存的过程
    • 4.2 浮点数取的过程

1. 整数在内存中的存储

  • 整数的2进制表示有三种方法:原码、反码、补码
  • 有符号的整数都有符号位和数值位,符号位‘0’表示正,‘1’表示负
  • 整数在内存中都是以补码形式存储,原因是使用补码可以将数值位和符号位统一处理,对只有加法器的CPU来说,不需要其他硬件电路就能实现加减法

2. 大小端字节序和字节序判断

  • 大端存储模式
  • 指的是一个数据的低位字节的内容保存到内存的高地址处,而数据的高位字节内容则保存在内存的低地址处
  • 小端存储模式
  • 指的是一个数据的低位字节的内容保存到内存的低地址处,而数据的高位字节内容则保存在内存的高地址处

  • 举个简单的例子

在这里插入图片描述


  • 那么大端字节序存储呢?

在这里插入图片描述


  这里需要注意的是,数据在内存中是以二进制进行存储的,而这里的四个字节内容11 22 33 44,是在内存中的地址中以二进制的形式进行存储

  • 如何判断大小端字节序呢?
    在这里插入图片描述

3. 整数存储练习

3.1 练习1

在这里插入图片描述


在这里插入图片描述


  • 类型的作用
  • 1.申请内存空间的大小
  • 2.类型决定了看待内存中数据的视角

3.2 练习2

在这里插入图片描述


在这里插入图片描述


3.3 练习3

在这里插入图片描述


在这里插入图片描述


3.4 练习4

在这里插入图片描述


在这里插入图片描述


3.5 练习5

在这里插入图片描述


在这里插入图片描述


4. 浮点数在内存中的存储

4.1 浮点数存的过程

  • 浮点数的类型一般是float、double、long double
  • 国际标准iEEE(电气和电子工程协会)规定,任意一个二进制浮点数V可表示为:
  • V = (-1) ^ S * M * 2 ^ E
  • M表示有效数字,且M是大于等于1的,且小于2
  • (-1)^S表示符号位,S等于0表示V为正数,S等于1表示V为负数
  • 2^E是指数位

  什么意思呢?接下来举个例子来帮助我们理解
在这里插入图片描述


  • 那么浮点数是如何在内存中进行存储呢???
  • 对于32位的浮点数(float),最高的1位存储符号位S,接着8位存储指数E,剩下的23位存储有效数字M
  • 对于64位的浮点数(double),最高的1位存储符号位S,接着11位存储指数E,剩下的52位存储有效数字M
  • float E(真实值)+ 127(中间值)
  • double E(真实值)+ 1023(中间值)

在这里插入图片描述


在这里插入图片描述


  举个例子
在这里插入图片描述


4.2 浮点数取的过程

  • 对于S,直接取出来即可,对于M,则是取出来前面补1
  • 指数E取出有三种情况
  • 指数E不全为0或不全为1
  • 这时,指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1

在这里插入图片描述


  • 指数E全为0
  • 这时,指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上前面的1,而是直接还原成0.xxxxxx的小数,这样是为了表示±0,以及接近0的无限小的数

  • 指数E全为1
  • 这时,如果有效数字M表示0,表示±无穷大(政府取决于符号位S)

  举例
在这里插入图片描述


http://www.mrgr.cn/news/42698.html

相关文章:

  • 基于Zynq SDIO WiFi移植一(支持2.4/5G)
  • mysql设置表的某一个字段每天定时清零
  • 【数据结构】链表-1
  • C++基础(7)——STL简介及string类
  • js进阶——深入解析JavaScript中的URLSearchParams
  • 文心一言 VS 讯飞星火 VS chatgpt (361)-- 算法导论24.3 3题
  • java入门基础(一篇搞懂)
  • 红日靶机(三)笔记
  • 神经网络激活函数之前的加权求和 | 矩阵相乘运算法则(清晰版)
  • Python : 类变量、静态方法、类方法
  • 初识Linux · 自主Shell编写
  • 基础算法之双指针--Java实现(上)--LeetCode题解:移动零-复写零-快乐数-盛最多的水
  • win11远程连接MySQL(linux版),不需安装docker容器
  • 探索TCP协议的奥秘:Python中的网络通信
  • Python+Matplotlib-高等数学上-P7-例如部分可视化
  • 【Golang】语法基础——切片:灵活、高效的数据处理利器
  • 37 预处理器与预处理指令、宏定义(定义常量、数据类型、替换文本、嵌套与取消)、带参宏(细节处理、与函数的区别)
  • 关闭IDM自动更新
  • 自然语言任务规划的新篇章:AutoGPT+P的突破
  • CGHV31500F