关于int类型数据在内存中的高低位存储问题
- 陈大剩
- 2020-11-15 11:09:14
- 4940
发现题目
复习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