实例二十七:共用体的应用
问题描述:
编写程序,使用函数调用,将一个 unsigned long 型整数的前两个字节和后两个字节作为 unsigned int 型整数输出。
#include<stdio.h>
union aa //定义共用体类型
{
unsigned short a[2];
unsigned long b;
};
int fen(unsigned long k)
{
union aa c,*p;
p = &c;
c.b = k;
printf("The long int is %ld\n",k);
printf("low = %u,high = %u\n",p->a[0],p->a[1]);
return 0;
}
int main()
{
unsigned long w;
w = 12345678;
fen(w);
return 0;
}
算法思路:
- 所谓共用体,就是几种不同类型的数据共用一组内存空间,但不能同时存放,每一瞬间只有一个成员起作用,这个成员就是最后一次存放的成员。
- 要把一个长整型前两个字节和后两个字节分离出来,我们可以申明含有两个成员的共用体类型,其中一个长整数,另一个是用来存放长整型的前两个字节和后两个字节的一维数组(含有两个元素)。
程序心得:
- 根据一个无符号长整型为四个字节(32位),一个无符号短整型为两个字节(16位)的情况来实现的,对于其他系统,要根据具体情况处理。
思考拓展:
利用共用体成员共享存储单元的特点,将 int 型数据的高字节和低字节分离出来。
提示:在一般 PC 系列计算机中,int 型数据的存储格式是低字节在前、高字节在后。
主要程序如下:
union un
{
int a;
char ch[2];
}data;
int main()
{
scanf("%x",&data.a};
printf("%x %x",data.ch[0],data.ch[1];
}