整型在内存中的存储

news/2025/3/15 16:05:24/

在计算机底层,所有数据最终都会被表示为二进制形式。整型也不例外。本文将介绍在C语言中如何定义和操作整型变量,并解释整型在内存中的存储方式。

整型变量的定义和使用

在C语言中,可以用int关键字来定义一个整数型变量。例如:

int age = 25;

上述代码定义了一个名为age的整型变量,并将其初始值设为25。

使用赋值语句可以修改age的值:

age = 30;

上述代码将变量age的值修改为30。

整型在内存中的存储

整型变量在内存中储存时,通常使用的是补码(two’s complement)表示法。即对于一个n位的有符号整型变量,在内存中右侧第一位表示符号位,0表示正数,1表示负数;剩下的n-1位表示数值,从低到高位依次递增排列。

例如,如果我们定义一个8位的有符号整型变量,它的范围是-128~127。那么:

  • 如果我们把十进制数10赋值给它,那么在内存中的表示形式是00001010(最高位为0,表示正数);
  • 如果我们把十进制数-10赋值给它,那么在内存中的表示形式则是11110110(最高位为1,表示负数),然后使用补码运算将其转换为原码表示: 11001010,即十进制数-10。

整型变量在内存中分配的字节数取决于计算机架构和编译器选项,通常情况下int类型占四个字节(32位)或八个字节(64位)。可以使用sizeof操作符来获取一个数据类型所占据的空间大小:

printf("%d\n", sizeof(int));    // 输出4或8

由于不同架构和编译器实现有所差异,上述代码的输出结果可能是4或8。

整型变量在内存中的存储顺序

在计算机底层实现中,整型变量在内存中存储的顺序可能因存储方案而异。目前,常见的两种整型存储方案是大端模式和小端模式。

  • 大端模式:最高位字节存放在最低的地址,最低位字节存放在最高的地址。
  • 小端模式:最低位字节存放在最低的地址,最高位字节存放在最高的地址。

下面是以32位整型变量为例,展示了在大端模式和小端模式下的存储方式:

  • 大端模式: 0x0000007B
+------+------+------+------+
| 00   | 00   | 00   | 7B   |
+------+------+------+------+
  • 小端模式: 0x0000007B
+------+------+------+------+
| 7B   | 00   | 00   | 00   |
+------+------+------+------+

可以看到,在大端模式下,最高位字节存放在最低的地址,即从左往右读取时,最先读取的是0x00,最后读取的是0x7B;而在小端模式下,最低位字节存放在最低的地址,即从左往右读取时,最先读取的是0x7B,最后读取的是0x00。

使用代码演示整型变量在内存中的存储

以下是一个使用C语言实现的示例程序,它演示了几种不同类型的整型变量在内存中的存储方式:

#include <stdio.h>int main() {int i = 0x12345678;// 整型变量在内存中的存储顺序取决于机器的处理器架构// 在此示例中假定是小端模式printf("Byte order of i: ");for (int j = 0; j < sizeof(int); j++) {printf("%02x ", ((char*)&i)[j]);}printf("\n");short s = 0x1234;printf("Byte order of s: ");for (int j = 0; j < sizeof(short); j++) {printf("%02x ", ((char*)&s)[j]);}printf("\n");long l = 0x123456789abcdef0;printf("Byte order of l: ");for (int j = 0; j < sizeof(long); j++) {printf("%02x ", ((char*)&l)[j]);}printf("\n");return 0;
}

以上代码将输出以下结果:

Byte order of i: 78 56 34 12 
Byte order of s: 34 12 
Byte order of l: f0 de bc 9a 78 56 34 12 

可以看到,在小端模式下,整型变量的最低字节存放在内存的低地址处,而高位字节存放在内存的高地址处。在前面的示例中,整型变量i在内存中的字节顺序是78 56 34 12,而短整型变量s仅使用了2个字节,其内存字节顺序为34 12。长整型变量l的内存字节顺序是f0 de bc 9a 78 56 34 12

查看内存中的二进制表示

使用指针可以访问并修改内存中的数据。例如,假设我们要查看整型变量age在内存中的二进制表示,可以定义一个指向该变量的指针,然后访问该指针的地址。

int age = 25;
int *p = &age;
unsigned char *pByte = (unsigned char*)p;
for (int i = sizeof(age) - 1; i >= 0; i--) {printf("%.2x ", *(pByte + i));
}

上述代码定义一个整型变量age,创建一个指向age的指针p,并将该指针转化为一个无符号字符型指针pByte,使得可以访问内存字节。然后遍历整型变量age的字节,使用printf函数打印每个字节的十六进制表示。程序输出的结果可能是19 00 00 00,分别对应于整数25在4字节内存中的二进制表示方式。

总结

本文介绍了C语言中整型变量的定义和使用方式,并解释了整型在内存中的存储方式。需要注意的是,不同计算机架构和编译器实现有所差异,对于数据类型所占据的空间大小需要谨慎处理,一般使用sizeof操作符获取实际的字节数。当需要访问或者修改内存中的值时,可以使用指针类型。


http://www.ppmy.cn/news/45148.html

相关文章

paddleocr 实操笔记 (前向后梳理)

要点&#xff1a; 参考&#xff1a; 基于PaddleOCR的数字显示器字符识别 工业仪表数值识别 前言 问题分析 要处理电表中的数据&#xff0c;可以分为步骤&#xff0c;拆解为以下问题&#xff1a; 感兴趣区域定位问题OCR读数问题 针对问题1,经过实验与探索&#xff0c;也找到…

FOC专题--环路PID算法拆分分析

foc中&#xff0c;其实foc算法并不是最难理解的&#xff0c;反而是在其中使用的PID算法&#xff0c;之前我只会套用别人的代码&#xff0c;但并不理解其中的各参数含义&#xff0c;导致在实际调整PI参数的时候&#xff0c;很难调到合适的值。 在实际理解什么是PID算法以及各参数…

socket 通信(一)

一 基本示例 #include <stdio.h> #include <sys/socket.h> // socket() #include <arpa/inet.h> // inet_addr() #include <netinet/in.h> // sockaddr_in{} INADDR_ANY #include <unistd.h> // close() #include <errno.h> …

如何在 Mac上运行 Windows程序?

在Mac 上运行 Windows的工具 在 Mac 上运行 Windows-无需重启即可在您的 Intel 或 Apple M 系列 Mac 上运行 Windows的工具来了,非常强悍和使用,有需要的朋友可以参考一下。 主要功能 运行快速、操作简单、功能强大的应用程序,无需重启即可在您的 Intel 或 Apple M 系列 M…

在线帮助中心对企业的作用及解决方案

帮助中心对于一款互联网产品来说&#xff0c;重要性不言而喻。随着公司客户服务水平的不断提高&#xff0c;越来越多的公司逐渐重视客户服务。一个好的在线帮助中心必定能提高客户的转化率。那么&#xff0c;在线帮助中心对企业的帮助和作用有哪些呢? 在线帮助中心的作用 1.快…

何为智能驾驶的「摩尔定律」?这家芯片方案商给出自己的答案

“我觉得&#xff08;高速NOA&#xff09;价格下降的速度可能会是非常快的&#xff0c;”4月6日&#xff0c;地平线技术开放日上&#xff0c;地平线副总裁、软件平台产品线总裁余轶南在与高工智能汽车沟通中称&#xff0c;“到2024年底&#xff0c;约100TOPS的高速NOA&#xff…

上海市青少年算法月赛丙组—目录汇总

上海市青少年算法2023年3月月赛&#xff08;丙组&#xff09; T1 神奇的字母序列 T2 约数的分类 T3 循环播放 T4 数对的个数 T5 选取子段 上海市青少年算法2023年2月月赛&#xff08;丙组&#xff09; T1 格式改写 T2 倍数统计 T3 区间的并 T4 平分数字&#xff08;一&#xf…

第01章_Java语言概述

第01章_Java语言概述 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 1. Java知识脉络图 1.1 Java基础全程脉络图 1.2 本章专题与脉络 2. 抽丝剥茧话Java 2.1 当前大学生就业形势 麦可思研究院…