陈大剩博客

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

  • 陈大剩
  • 2020-11-15 11:09:14
  • 2271
  • 标签:
  • C

发现题目

复习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

  • 标签:
  • C
分享到:
1

说点儿什么吧

头像

表情

本站由陈大剩博客程序搭建 | 湘ICP备17009938号| Copyright © 2017 - 陈大剩博客 | 本站采用创作共用版权:CC BY-NC 4.0

站长统计| 文章总数[31]| 评论总数[12]| 登录用户[21]| 时间点[33]

登入

社交账号登录