c语言共用体怎么用

一般用C语言位操作都是直接用‘&’,‘|’等位操作计算符来实现位操作,不过有的时候就是想玩点花的。 先定义一个共用体,内部定义一个16位的变量,内部再定义一个结构体。 共用体实现位操作的关键就在于这个内部的结构体,首先明确一个知识,就是结构体内存中是连续的,

一般用C语言位操作都是直接用‘&’,‘|’等位操作计算符来实现位操作,不过有的时候就是想玩点花的。

先定义一个共用体,内部定义一个16位的变量,内部再定义一个结构体。

共用体实现位操作的关键就在于这个内部的结构体,首先明确一个知识,就是结构体内存中是连续的,但是不需要是一个完整的字节,因此定义内部定义16个一bit的位域,例如:u8 bit0 : 1;,最后该共用体的定义如下:

typedef union Test_UnionBit
{
    u16   Test_u16;
    struct
    {
        u8 bit0  : 1;
        u8 bit1  : 1;
        u8 bit2  : 1;
        u8 bit3  : 1;
        u8 bit4  : 1;
        u8 bit5  : 1;
        u8 bit6  : 1;
        u8 bit7  : 1;
        u8 bit8  : 1;
        u8 bit9  : 1;
        u8 bit10 : 1;
        u8 bit11 : 1;
        u8 bit12 : 1;
        u8 bit13 : 1;
        u8 bit14 : 1;
        u8 bit15 : 1;
    }Bits;
};

这样定义了这个共用体后,由于Test_u16变量和Bits结构体共用体一个内存空间,因此对Bits的成员变量操作,也就是一个位的操作,就能同时对Test_u16的对应位操作,也就实现了对Test_u16进行位操作。

定义好共用体后具体操作方法如下:

1.先定义一个共用体变量:

union Test_UnionBit Onebitu16;

2.利用宏定义记录对应位的意义,比如第16位为X轴电机开关:

#define X_Motor bit15

3.之后再使用只需:

Onebitu16.Bits.X_Motor =1;

这样就实现了位操作。

将最高位改为1,其余为0,相当于十进制的32768,用VS2019测试结果如下,结论正确:

知秋君
上一篇 2024-08-19 17:02
下一篇 2024-08-19 16:36

相关推荐