深度剖析数据在内存中的存储~

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统) 阅读详情

今天给小伙伴们分享的是数据在内存中存储的相关知识,全程干货满满哦~

一.基本类型的介绍

在C语言中,基本内置类型及其通常的内存大小如下。但请注意,实际的大小取决于编译器和正在运行程序的系统的架构(32位或64位)。

  1. 整数类型:

    • int: 通常为 4 字节,但有时在某些系统上可能是 2 字节。
    • char: 总是为 1 字节。
    • short: 至少为 2 字节,通常是 2 字节。
    • long: 至少为 4 字节,32位系统上通常是 4 字节,64位系统上可能是 8 字节。
    • long long: 至少为 8 字节。
  2. 浮点类型:

    • float: 通常是 4 字节(单精度)。
    • double: 通常是 8 字节(双精度)。
    • long double: 至少为 12 字节,但可能更大。
  3. 无符号类型:

    • unsigned int: 与 int 相同。
    • unsigned char: 与 char 相同。
    • unsigned short: 与 short 相同。
    • unsigned long: 与 long 相同。
    • unsigned long long: 与 long long 相同。
  4. 布尔类型 (C99 标准引入):

    • bool: 通常为 1 字节。
    • _Bool: 至少为 1 字节。
  5. _Complex 类型 (C99 标准引入):

    • complex: 由两个 float 类型的值组成,因此通常是 8 字节。
    • double _Complex: 由两个 double 类型的值组成,因此通常是 16 字节。
  6. void 类型:

    • void: 没有内存大小。
  7. 指针类型:

    • 指针的大小取决于系统的架构:
      • 在32位系统上,指针通常是 4 字节。
      • 在64位系统上,指针通常是 8 字节。
  8. 枚举类型 (enum):

    • enum: 大小取决于底层的表示类型,但至少与 int 相同。
  9. 结构体类型 (struct):

    • struct: 大小取决于其成员的排列和对齐。
  10. 联合类型 (union):

    • union: 大小等于其最大成员的大小。
  11. 数组类型:

    • 数组的大小是其元素大小乘以元素数量。

要确定特定系统上特定类型的确切大小,可以使用 sizeof 运算符。

二. 原码、反码、补码

一个变量的创建是要在内存中开辟空间的,空间的大小是根据不同的类型而决定的。那么数据在所开辟内存中到底是如何存储的呢?
这里就得引出 原码 、反码和补码了,整型的存储与它们息息相关。

在计算机科学中,原码、反码和补码是用于表示有符号整数的不同二进制编码方式。这些编码方式在计算机系统中用于简化算术运算,尤其是在处理负数时。以下是每种编码方式的详细解释:

  1. 原码(True Form):

    • 原码是最直观的表示方法,其中最高位用作符号位(0表示正数,1表示负数),其余位表示数值的绝对值。
    • 例如,对于一个8位的整数,0010 0101(原码)表示正数3,而1010 0101(原码)表示负数3。
  2. 反码(One's Complement):

    • 反码用于表示负数的另一种形式。对于正数,其反码与原码相同;对于负数,反码是其原码除符号位外,其他各位取反(即0变1,1变0)。
    • 例如,0010 0101(反码)表示正数3,而1111 1010(反码)表示负数3。
  3. 补码(Two's Complement):

    • 补码是计算机中最常用的表示方法,用于简化二进制的加法和减法运算。对于正数,其补码与原码相同;对于负数,补码是其反码加1。
    • 补码的设计允许计算机使用相同的加法运算来处理加法和减法,因为负数的补码可以通过加1得到正数的补码。
    • 例如,0010 0101(补码)表示正数3,而1111 1011(补码)表示负数3。

特点和用途:

  • 原码:直观,但不利于计算机处理。
  • 反码:用于表示负数的一种方式,但不是计算机中常用的表示方法。
  • 补码:计算机中最常用的表示方法,因为它允许使用相同的硬件电路来处理加法和减法。

示例:

假设我们有一个8位的整数,数值为3和-3:

  • 原码:

    • 正数3:0010 0101
    • 负数3:1010 0101
  • 反码:

    • 正数3:0010 0101
    • 负数3:1111 1010
  • 补码:

    • 正数3:0010 0101
    • 负数3:1111 1011

在计算机系统中,通常使用补码来表示整数,因为它简化了算术运算的硬件实现。

三.大小端介绍

大小端(Endianness)是指计算机系统中字节(Byte)的排列顺序。在多字节数据(如整数、浮点数等)的存储中,不同的计算机系统可能会以不同的方式排列字节的顺序。主要有两种大小端模式:

  1. 大端(Big-Endian):

    • 在大端模式中,最重要的字节(最高有效字节,即MSB)存储在最低的内存地址处,其次是次高有效字节,以此类推,直到最低有效字节(LSB)存储在最高的内存地址处。
    • 例如,假设有一个16位的整数 0x1234,它在大端模式下的内存存储顺序为 0x12 0x34。
  2. 小端(Little-Endian):

    • 在小端模式中,最低有效字节(LSB)存储在最低的内存地址处,然后是次低有效字节,以此类推,直到最高有效字节(MSB)存储在最高的内存地址处。
    • 同样以 0x1234 为例,它在小端模式下的内存存储顺序为 0x34 0x12。

影响:

大小端模式的不同会影响数据在网络上的传输以及不同系统间的文件交换。例如,网络协议通常规定以大端模式传输数据,而许多现代的个人电脑和服务器则使用小端模式存储数据。

如何确定系统的类型:

在C语言中,可以通过编写一个简单的程序来确定系统是大端还是小端:

#include <stdio.h>

int main() {
    unsigned int x = 0x12345678;
    char *c = (char*) &x;
    if (*c == 0x78) {
        printf("Little-Endian\n");
    } else {
        printf("Big-Endian\n");
    }
    return 0;
}

这段代码通过检查一个整数的最低位字节的内容来确定系统的字节序。如果输出是 0x78,则系统是小端模式;如果输出是 0x12,则系统是大端模式。

总结

大小端模式是计算机系统设计中的一个基本属性,它影响着数据的存储和传输。了解和处理大小端问题是计算机编程中的一个重要方面。

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

浮点型的存储与整型的存储大大不同。在计算机系统中,浮点数的存储通常遵循特定的标准,以确保不同系统和平台之间浮点数的一致性和可移植性。最常用的标准是 IEEE 754 标准,它定义了浮点数的存储格式、精度和操作。

IEEE 754 标准

IEEE 754 标准有几种不同的格式,包括单精度(32位)、双精度(64位)和扩展精度(80位、128位等)。这里我们主要讨论最常用的单精度和双精度浮点数:

  1. 单精度浮点数(32位):

    • 符号位(1位):最高位是符号位,0 表示正数,1 表示负数。
    • 指数位(8位):表示数值的范围,使用偏移量(bias)表示,单精度中 bias = 127。
    • 尾数位(或小数位,23位):表示数值的精度,存储实际的数值部分。
  2. 双精度浮点数(64位):

    • 符号位(1位):同样,最高位是符号位。
    • 指数位(11位):双精度中的 bias = 1023。
    • 尾数位(或小数位,52位):存储实际的数值部分。

存储格式

以单精度为例,一个浮点数 A 在内存中的存储可以分为三个部分:

  1. 符号位:1位
  2. 指数:8位
  3. 尾数:23位

存储格式如下:

SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
  • S 代表符号位
  • E 代表指数位
  • M 代表尾数位

计算方法

  1. 指数:存储的指数值需要减去偏移量(bias)来得到实际的指数值。
  2. 尾数:尾数部分通常在存储时会默认加上一个隐含的前导1(对于规格化数),即 1.MMMMMMMMM,其中 1 是隐含的。

示例

假设有一个单精度浮点数 A = 3.5,其二进制表示为 11.1(忽略小数点后的无限循环部分),则:

  1. 符号位 S 为 0(因为 A 是正数)。
  2. 指数部分 E 为 10000101,转换为十进制为 133,实际指数为 133 - 127 = 6。
  3. 尾数部分 M 为 10000000000000000000000。

因此,3.5 的 IEEE 754 表示为:

0 10000101 10000000000000000000000

注意

  • 特殊值如 NaN(非数)、Infinity(无穷大)和 0(零)有特殊的编码方式。
  • 浮点数的表示可能不是唯一的,因为存在规格化和非规格化数的不同表示。

了解浮点数的存储方式对于编写精确的数值计算程序非常重要,尤其是在处理浮点数精度和舍入误差时。

最后祝小伙伴们天天开心,早日成为技术大牛@

WINCC7.3破解文件 WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载! 立即下载

相关推荐

【SIP基础】SIP协议基本呼叫流程

SIP呼叫流程下图显示了一个SIP会话的基本呼叫流程。 下面是上述呼叫流程的详细解释: Alice发送INVITE请求到代理服务器,INVITE请求负责发起会话。 代理服务器立即发送Trying 100给请求者(Alice),表示试图响应INVITE请求,以防止重传该INVITE请求。 代理服务器搜索Bob所在位置服务器的地址,得到的地址后,将转发INVITE请求到Bob。 此后,Bob回应180

VVSIP官网博客 1万+

深度解析数据在内存中的存储

目录 一,基本数据类型分类 1.1整型 1.1.1char型与整型的关系 1.1.2从短整形 short 到更长的整型 long long 1.2浮点型 1.2.1浮点数分类 二,整型在内存中的存储 2.1原码,反码,补码 2.1.1正数 2.1.2负数 2.2大小端(字节序)存储 三,浮点数在内存中的存储 3.1 IEE754的规定 3.1.1对不同大小浮点数的规定 3.1.2对有效数字M的规定 3.1.3对指数部分(阶码)的规定 3.2取出浮点数的规定 3.2....

qq_52777887的博客 1705

Excel炒股党必备:手把手教你用Power Query免费获取并刷新股票历史数据

本文详细介绍了如何利用Excel中的Power Query工具免费获取并自动刷新股票历史数据,特别适合Excel炒股党。从环境配置、数据源选择到实战操作,手把手教你建立智能数据管道,实现高效投资分析。通过参数化股票代码和定时刷新功能,大幅提升数据更新效率。

weixin_26767391的博客 657

C语言基本数据类型(所占字节数)

一 C语言基本数据类型 short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。 在不同的系统上,这些类型占据的字节长度是不同的: **16位编译器: char/unsigned char :1字节 char :2字节 short int:2字节 int/unsigned int:2字节 long int:4字节 float:4字节 double:8字节* 32位编译器: *char/unsigned char :1字节 char :4字节 short

weixin_43491077的博客 4万+

【Creo】关于Creo一换网络就报错许可证丢失问题解决方案

依照我的个人理解,Creo只要一更换网络,则其许可证里面的网卡参数和现在的网络就对不上了,所以就会出现报错,并且有可能是报错代码(-9),提示许可证激活有问题。

weixin_52002180的博客 6042

python——模拟砍价

类型:随机数。

m0_62488776的博客 1972

C语言类型数据所占字节数

16位编译器 char : 1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个字节 32位编译器 char :1个字节 char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) short int : 2个字节 int:

一天不学习,就浑身难受 1万+

IMU标定中的Allen方差

Allen方差 Allen方差是IMU标定任务中的常用工具。IMU标定可以分为确定性误差和随机误差,确定性误差包括:scale、bias、misalignment。随机误差则主要是高斯白噪声和bias随机游走。Allen方差主要用于标定随机误差。 Allen方差获取 Allen方差的计算方法如下: 保持IMU静止, 采集N个数据点。 将N个点定长分组,常用的交叠式Allen方差如下(n=3): 对于每个子集,计算均值后,计算相邻两组的方差,得到的时间-方差曲线即为Allen方差。 Alle

realjc的博客 5738

int, long long, double 等数据类型的长度及范围整理

(1)整数类型:byte、short、int、long (2)小数类型:float、double (3)字符类型:char (4)布尔类型:boolean 先附上一个比较直观的表,长度表示字节: byte: 字节 bit: 位 1. 短整型short: 所占内存大小:2byte=16bit; 所能表示范围:-32768~32767;(即-2^15~2^15-1) 2. 整型int: 所占内存大小:4byte=32bit; 所能表示范围:-21...

BadSheepC 5万+

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

WW、forever的博客 486

案例:无人船测量点位数据+ArcGIS 10.6软件生成三维水下地形的两种方法

通常情况下,采用无人船进行水下地形测量,得到的是离散的,具有点号、日期、时间、东坐标(E)、北坐标(N)、水面高程、水下高程和水深等信息的点位数据,该数据一般由航带点位数据加水岸线组成,如下图所示: 原始点位数据格式如下: 下面讲解在ArcGIS软件中生成三维水下地形的两种常用方法。 一、构建不规则三角网(Tin) 1、创建Tin 生成的Tin: 2、Tin转栅格 Tin to Raster: 三维展示: 二、空间插值 栅格插值常用的方法有:克里...

智慧空间实验室 6755

C语言中的long型是究竟占4个字节还是8个字节?

今天在复习C语言的时候踩了一个很有意思的坑。 #include <stdio.h> int main() { printf("long int : %d\n", sizeof(long)); return 0; } 上面是我在IDE中使用的测试代码,执行它我的第一反应是会得到 4 的长度。 但实际的结果如下图所示: 是的,没看错,long的长度是8个字节。我所认识到的长整型long不应该是4个字节吗。 那会不会与编译器的有关? 随机我用mingw32也跑了一次,结果依旧是8

. 5万+

通信原理 | 通俗理解 | 因子图、消息传递以及它们之间的关系

在算法迭代过程中,通过反复更新这些消息,直到收敛,最终可以得到每个变量的边缘概率分布或最有可能的整体状态。算法通过因子图中的节点反复交换消息,直到找到最优解或所有消息稳定下来,从而解决了比如聚会日期这样的优化问题。在实际应用中,这种方法可以用来解决更复杂的问题,比如图像识别、语音识别和机器学习中的其他问题。,特别是在处理概率模型和执行概率推断时,因子图提供了一个强大的工具。(比如朋友的空闲时间和地点的可用性),并且你希望尽可能让所有人满意。在真正的因子图和消息传递算法中,这个过程被数学化和形式化。

若北辰 1205

深度剖析数据在内存中的存储(修炼内功~吊打面试官)

史上最强剖析数据在内存中存储,十分钟学完,惊呆面试官(整数+浮点数储存规则)

qq_42996461的博客 1648

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深度剖析数据在内存中的存储

char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数以及他们所占存储空间的大小。使用这个类型开辟内存空间的大小(大小决定了使用范围)。如何看待内存空间的视角。> 数组类型> 结构体类型 struct> 枚举类型 enum> 联合类型 union什么是大端小端:大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;

m0_68662723的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【C进阶】深度剖析数据在内存中的存储

目录一、数据类型的介绍1.类型的意义:2.类型的基本分类二、整形在内存中的存储1.原码 反码 补码2.大小端介绍3.练习三、浮点型在内存中的存储1.一个例子 2.浮点数存储规则前面我们已经学习了基本的内置类型以及他们所占存储空间的大小:(1)整形家族:【温馨提示】:char类型也是整形家族的原因:【注意】:(2)浮点数家族:都可以表示小数(3)构造类型(自定义类型)(4)指针类型(5) 空类型eg:int main(void)就表示main函数不需要参数但是实际上main函数是有三个参数的int main

qq_73017178的博客 3381

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

大家好!我是保护小周ღ,简单介绍本期内容:首先讲了一些计算机基础知识,深度剖析整型、浮点型数据在内存中的存储,我们可以了解到数据是以什么样的形式存储的,又是以什么形式读取的,在讲解的过程中涉及到截断,整型提升等相关问题,快来看看吧~...

保护小周ღ的博客 2381

进阶C语言-深度剖析数据在内存中的存储

关于数据在内存中的存储

qq_73121173的博客 942

【C语言】深度剖析数据在内存中的存储

C语言中有哪些数据类型:数据类型的意义:我们知道,一个变量的创建是要在内存中开辟空间的,而且所开辟空间的大小是根据不同的类型决定的,那么,数据在所开辟内存中到底是如何存储的呢?接下来我们探讨这个问题。而计算机内部存放的就是数据的补码,原因如下:注:为什么说补码与原码相互转换运算过程是相同的呢,因为对于一个负数来说,原码取反加一可以得到补码,同样补码取反加一也可以得到原码,二者转换的逻辑是相同的,所以不需要额外的硬件电路。 我们可以看到,在计算机内部存储的确实是数据的补码,但是我们也发现,数据在内存中好像是

在平淡的日子里寻找存在的价值 1384

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

char //字符数据类型 short //短整型 int //整形 long //长整型 long long //更长的整形 float //单精度浮点型 double //双精度浮点型1.使用这个类型开辟内存空间的大小(大小决定了使用的范围)2.如何看待内存空间的视角实例一:不管是整数里面的正整数还是负整数,发现在当前编译器底下,这些补码都是倒着存储的大小端定义:大端(存储)模式(大端字节序),是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。

AI_ELF的博客 1226
上一篇: 今天你也很棒呢
下一篇: ~C.库函数的介绍~
知困勉行的Allen
博客等级 码龄3年 279粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值