C语言利用共用体实现位操作

C语言利用共用体实现位操作一般用 C 语言位操作都是直接用 amp 等位操作计算符来实现位操作 不过有的时候就是想玩点花的 先定义一个共用体 内部定义一个 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测试结果如下,结论正确:

小讯
上一篇 2025-02-22 23:02
下一篇 2025-03-17 07:36

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/125095.html