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

C语言复习笔记--数据在内存中的存储

        今天我们来复习一下数据在内存中的存储方式.话不多说进入正题.

整数在内存中的存储

        整数的2进制表⽰⽅法有三种,即原码、反码和补码.三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,剩余的都是数值位。

        同样的补码去反+1也可以得到原码.对于整形来说:数据存放内存中其实存放的是补码.

这里就有个小问题,为什么存放的是补码呢?

在计算机系统中,数值⼀律⽤补码来表⽰和存储。

原因在于,使⽤补码,可以将符号位和数值域统⼀处理; 同时,加法和减法也可以统⼀处理(CPU只有加法器).

此外,补码与原码相互转换,其运算过程是 相同的,不需要额外的硬件电路。

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

  什么是大小端?

        其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为⼤端字节序存储和⼩端字节序存储 .

        大小端的概念一定要记清楚,不要记混了.

  为什么有大小端?

         

  一些练习 

        既然已经了解了大小端的概念,那么让我们看下下面的练习,来运用一下这部分知识.

        练习1

设计⼀个⼩程序来判断当前机器的字节序

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

        练习2

        题解及输出见下

        练习3

        注:整形提升时要看类型是否是有符号的,而不是看时以什么形式打印的.

        题解和输出见下 

 

        练习4

        解析和输出结果见下: 

        练习5

        左边因为是无符号char,当加到256时会截断就又会变为0,所以会死循环打印hello world.

        右边是无符号整数,无论如何也不会出现负数,也会死循环.减到0之后会变成2^32-1.

        练习6

        &a+1加的是整个数组的地址,ptr[-1]就是数组a的最后一个元素,为4.

        将a转为int再+1就只是+1,也就是网前走一个字节.解引用并且用16进制打印需要4字节,这4个字节从低地址到高地址是00 00 00 02,因为是小端存储,所以打印出的是02 00 00 00.\

        输出结果见下:(要在x86环境下运行)

浮点数在内存中的存储

        先看一个引入, 

        上面程序的输出结果为

        从上面的输出结果来看,浮点数的储存方式是不同于整型的,那么浮点数是如何存储的呢?

  浮点数的存储

        IEEE 754规定: 对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M,对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M.

        浮点数存的过程

        但是即便是这样一些浮点数因为有效位长度问题也只能近似存储.所以浮点数的相等比较不能直接用'=='.

        想要深入了解浮点数比较可以看下C语言加餐--浮点数比较-CSDN博客这篇博客.

       浮点数取的过程

        指数E从内存中取出还可以再分成三种情况:

 

        以上就是浮点数的存储规则啦.今日的复习就到这里了.我们下篇博客见. 

相关文章:

  • 【LLM】解析RAG增强检索技术:原理、实现与应用
  • 23种设计模式-行为型模式之解释器模式(Java版本)
  • 光谱共焦位移传感器的优势有哪些?
  • 洛谷题解 | CF111C Petya and Spiders
  • 算法基础学习|02归并排序——分治
  • go单向链表
  • 阿里千问Qwen3技术解析与部署指南 :混合推理架构突破性优势与对DeepSeek R1的全面超越
  • 软件测试基础知识详解
  • 【VLNs篇】01:视觉语言导航(VLN)中的LLM角色
  • 关于flex布局
  • scratch代码——游戏开发 【弹簧与反弹】
  • ArrayList的elementData.length和size
  • 双向流热固耦合的收敛
  • (leetcode) 力扣100 4.移动零(两种O(n)方法 双指针)
  • 大模型核心技术及架构解析
  • 2025.4.29_STM32_看门狗WDG
  • 一文读懂 JavaScript 中的深浅拷贝
  • C#学习——类型、变量
  • 学习在暑假避免躺平和内卷(马井堂)
  • 16、路由守卫:设置魔法结界——React 19 React Router
  • 浙商银行一季度净赚超59亿微增0.61%,非息净收入降逾22%
  • 解放日报:上海深化改革开放,系统集成创新局
  • 辽宁省委书记郝鹏、省长王新伟赶到辽阳火灾事故现场指导善后处置工作
  • 万科:一季度营收近380亿元,销售回款率超100%
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 看展览|建造上海:1949年以来的建筑、城市与文化