C语言数据存储

1. 数据类型详细介绍

C语言内置类型包括 char, short, int, long, long long, float, double。类型的意义在于决定了开辟内存空间的大小以及看待内存空间的视角。

1.1 类型的基本归类

  • 整型家族 :包含 char (注意:char 在标准中未规定是 signed 还是 unsigned,取决于编译器), short, int, long 等。均分为 signed (有符号) 和 unsigned (无符号)。
  • 浮点数家族float, double
  • 构造类型 :数组, 结构体 (struct), 枚举 (enum), 联合 (union)。
  • 指针类型int *pi, char *pc, void *pv 等。
  • 空类型void,用于函数返回、参数或指针。

2. 整型在内存中的存储

计算机中的整数有三种二进制表示方法:原码、反码、补码 。 在计算机系统中,数值一律用补码来表示和存储。

2.1 原码、反码、补码转换规则

  • 正数:原码、反码、补码相同。
  • 负数
    • 原码:符号位为1,其余位为数值的绝对值。
    • 反码:符号位不变,其他位按位取反。
    • 补码:反码 + 1。

2.2 为什么要用补码?

  • 可以将符号位和数值域统一处理。
  • 加法和减法可以统一处理(CPU 只有加法器)。
  • 补码与原码相互转换的过程是相同的(求补的补即为原),不需要额外硬件。

3. 大小端字节序

当数据大小超过1个字节时,就存在如何安排多个字节顺序的问题。

  • 大端模式 (Big Endian):数据的低位保存在内存的高地址中,高位保存在低地址中。(类似我们阅读习惯,高位在前)。
  • 小端模式 (Little Endian):数据的低位保存在内存的低地址中,高位保存在高地址中。(常见于 x86 架构)。

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

遵循 IEEE 754 标准。任意二进制浮点数 V 可以表示为:

  • S (Sign):符号位,0正1负。
  • M (Significand):有效数字,1 ≤ M < 2。
  • E (Exponent):指数位。
  • 32位 (float):S(1位) + E(8位) + M(23位)。
  • 64位 (double):S(1位) + E(11位) + M(52位)。

特殊规定

  1. M 的存储 :因为 M 总是 1.xxxx,为了节省一位,默认第一位的 1 被舍去,只存 xxxx。读取时自动补回。
  2. E 的存储 :E 是无符号整数,但真实指数可能是负数。存入时需加上中间数 (Bias)
    • float 的 Bias 为 127。
    • double 的 Bias 为 1023。
相关推荐
码云数智-园园40 分钟前
微服务架构下的分布式事务:在一致性与可用性之间寻找平衡
开发语言
C++ 老炮儿的技术栈1 小时前
volatile使用场景
linux·服务器·c语言·开发语言·c++
hz_zhangrl1 小时前
CCF-GESP 等级考试 2026年3月认证C++一级真题解析
开发语言·c++·gesp·gesp2026年3月·gespc++一级
Liu628881 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
IT猿手1 小时前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
AI科技星2 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
sunwenjian8862 小时前
Java进阶——IO 流
java·开发语言·python
波特率1152002 小时前
const关键字与函数的重载
开发语言·c++·函数重载
FL16238631292 小时前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
百锦再2 小时前
Java 并发编程进阶,从线程池、锁、AQS 到并发容器与性能调优全解析
java·开发语言·jvm·spring·kafka·tomcat·maven