以一道union面试题说明大端小端和内存高位低位

来源:互联网 发布:香水时代淘宝店 正品吗 编辑:程序博客网 时间:2024/04/29 07:53

首先我们来看一道题:

union number{

int value;
char str[2];
};
number test;
test.value = 0;
test.str[0] = 10;
test.str[1] = 1;

printf("%d", test.value);

请问输出是多少?

一步步来求解,union是共享内存的,所以当前test占用4个字节。

1:test.value = 0;的时候,四个字节都是0,

2:test.str[0] = 10;这时内存编程如下图:


3:test.str[1] = 1;这时内存编程如下图:


4:把内存中的值转成了int类型输出。

最后一步就涉及到大端小端、内存高低和数据高低位问题,内存高地位在2、3步图片中可以看清楚了,下来了解下大端小端的概念和数据高地位概念:

数据高地位:

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

5:结合2、3步的内存高地位,第四部的数据高低位和大小端模式概念,可以得到如下图的值:


所以大端下输出:2561

小端下输出:266

另外说一句,一般我们用的x86架构cpu都是小端。

0 0
原创粉丝点击