目录
共用体也就是联合体,变量共用一块空间。
1.共用体求大小。
结构体的总大小要能整除联合体成员中最大的内置类型大小,有人用了,其他人就不能用。以免发生错误。
例:答案为24
解析:联合体中成员最大的大小为4*5=20,最大的内置类型大小为long long,为8,故24可以被8整除。
2.应用(大小端问题)
小端存放:低端存放低地址数据
大端存放:低端存放低地址数据
如:0x12345678,‘12’为高字节,‘78’为低字节
小端存放:
低地址->高地址
78 | 56 | 34 | 21 |
大端存放:
低地址->高地址
12 | 34 | 56 | 78 |
①为什么一个字节存两位十六进制值?
1byte=8bit
一个十六进制数表达0-15
2^4=16,故四位存放一个十六进制数,1个字节存放两个是二进制数。
②1在小端存放和在大端存放的情况
int a=1;
a: 高地址->低地址
0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 |
小端存放:高地址->低地址
0000 0000 | 0000 0000 | 0000 0000 | 0000 0001 |
大端存放:高地址->低地址
0000 0001 | 0000 0000 | 0000 0000 | 0000 0000 |
③所以如果只输出一个字节,小端存放输出的字节为1,大端存放输出的值为0。
④综上也就是说当一个int类型的1转换成char类型时,小端存放输出的字节为1,大端存放输出的值为0。
代码如下:
#include<stdio.h>
union Out
{
int a;
char b;
}out;
int main()
{
out.a = 1;
printf("%d", out.b);
}
结果为1.
一般来说,电脑是小端,手机是大端。