关于int类型数据在内存中的高低位存储问题

简介: 关于int类型数据在内存中的高低位存储问题

发现题目

复习C语言的时候,发现一个很有意思的题目;

int main() {
    union {
        char i[4];
        int k;
    } r;
    r.i[0] = 2;
    r.i[1] = 0;
    r.i[2] = 0;
    r.i[3] = 0;
    printf("%d \n", r.k);
}


自以为是答案是:8,run后发现答案是:2

解题详解

其实命题人是考一个int类型的数据,在内存中是如何存储的

例如:int类型的1在内存中占用4个字节,那这4个字节具体怎么存储呢?

目前市面上大部分书籍说的都是数字的字节表示形式,按照二进制的方式进行存储。我就理所当然的认为是按照下面方式进行存储的。

第1字节 第2字节 第3字节 第4字节

00000000 00000000 00000000 00000001

综合网上百度后,发现实际上并不是这样存储的,而是低位在前,高位在后的方式存储的,也就是按照下面的方式

第1字节 第2字节 第3字节 第4字节

00000001 00000000 00000000 00000000

觉得有点不太好理解,于是就写了一段小程序来检验一下,看看是否是我说的这种方式进行存储。

#include <stdio.h>
int main(){
    int i = 1;
    unsigned char * p = (unsigned char *)(&i);
    printf("第1字节:%d,第2字节:%d,第3字节:%d,第4字节:%d\n",*p,*(p+1),*(p+2),*(p+3));
}


output:第1字节:1,第2字节:0,第3字节:0,第4字节:0

目录
相关文章
|
24天前
|
数据采集 分布式计算 数据处理
Dataphin常见问题之与指定类型int不兼容如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
28天前
|
存储 JSON 监控
Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
【2月更文挑战第30天】Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
14 1
|
1月前
|
SQL 流计算 OceanBase
OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
【2月更文挑战第25天】OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
27 3
|
9天前
|
存储 C语言
数据在内存中的存储2
数据在内存中的存储2
|
9天前
|
存储 编译器
数据在内存中的存储1
数据在内存中的存储
|
20天前
|
存储 编译器 程序员
【C语言】整形数据和浮点型数据在内存中的存储
【C语言】整形数据和浮点型数据在内存中的存储
12 0
|
24天前
|
存储 Windows 容器
浮点数在内存中的存储
浮点数在内存中的存储
18 2
|
1月前
|
存储 小程序 C语言
【深度剖析数据在内存中的存储】C语言
【深度剖析数据在内存中的存储】C语言
|
1月前
|
存储 小程序 C语言
【C语言进阶】深度剖析数据在内存中的存储
【C语言进阶】深度剖析数据在内存中的存储
|
2月前
|
存储 编译器 C语言
C语言:数据在内存中的存储形式
C语言:数据在内存中的存储形式