您的位置:首页 > 其它

联合体的正确使用方式

2018-02-24 16:53 211 查看
  工作半年多了,一直还没用到union类型,所以一直是认为union没有什么特别的用处,甚至感觉没有存在的意义。直到有一天看到了union和位段一起使用时,才发现这才是”正确的打开方式“,union不是没用,而是一但用到,都是一些高级用法。先看看union是怎么和位段连用的。typedef struct
{
unsigned char DISTANCE :8; //[0]
unsigned char SPEED_H :8;//[1] ,速度的高位字节
unsigned char SPEED_L :2; //速度的低位字节
unsigned char ACCELERATE_H :6;//[2]
unsigned char ACCELERATE_L :8;//[3]
}obj_information_t;

typedef union
{
unsigned char DATA[4];
obj_information_t INFORMATION;
}obj_information_u;

obj_information_u obj_info_pre;
obj_information_u obj_info_current;
obj_info_current.DATA = obj_info_pre.DATA;//这样在赋值的时候就可以清晰的知道,变量占用的内存多大
还在网上看到了更高级的用法,就是用联合体对数据进行位操作,推荐程序员们都看一下,链接http://blog.csdn.net/xiaoliu0518/article/details/31785083typedef struct{
    uchar bit0:1;
    uchar bit1:1;
    uchar bit2:1;
    uchar bit3:1;
    uchar bit4:1;
    uchar bit5:1;
    uchar bit6:1;
    uchar bit7:1;
}bits;
typedef union{
    uchar data_char;
    bits  data_bits;
}utype;

uchar *addr = (uchar*)0x10;
utype value;
value.data_char = *addr;

如果要查看某个位比如第3位
直接看 value.data_bits.bit3就可以了。

如果要设置某个位,比如设置第0位为1,第7位为0
value.data_bits.bit0 = 1;
value.data_bits.bit7 = 0;
*addr = value.data_char;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: