c语⾔联合有什么好处,C语⾔中联合体union妙⽤
struct,union,enum 这三种是C语⾔中常见的⾃定义数据类型。
struct是⽤于不同或相同数据类型的整合,整合成最终的struct类型数据。
union是⽤于将不同类型数据存放与⼀处内存地址的⽅法。
enum是⼀个被命名的整型常数的集合,⾥⾯的所有数据都是整型。
关于union的⼀处妙⽤(百度百科中):
联合体在单⽚机中的应⽤
单⽚机中经常会遇见分离⾼低字节的操作,⽐如进⾏计时中断复位操作时往往会进⾏
(65535-200)/256,(65535-200)%256这样的操作,⽽⼀个除法消耗四个机器周期,取余也需要进⾏⼀些列复杂的运算,如果在短时间内需要进⾏很多次这样的运算⽆疑会给程序带来巨⼤的负担。其实进⾏这些操作的时候我们需要的仅仅是⾼低字节的数据分离⽽已,这样利⽤联合体我们很容易降低这部分开销。
代码:
union chufa{
int n; //n中存放要进⾏分离⾼低字节的数据
char a[2]; //在keil c中⼀个整形占两个字节,char占⼀个字节,所以n与数组a占的字节数相同
}test;
test.n=65535-200; //进⾏完这句后就⼀切ok了,下⾯通过访问test中数组a的数据来取出⾼低字节的数据
TH1=test.a[0]; //test.a[0]中存储的是⾼位数据,这是由于keil的特性,如果其他编译器还请⾃测
enum c++TL1=test.a[1]; //test.a[1]中储存了test.n的低位数据
!that's good,仅仅⽤了⼀条减法指令就达到了除法、取余的操作,在进⾏⾼频率定时时尤为有⽤。