结论:取字节的最低位赋值
实验环境:AVR Studio + WinAVR 071221
实验程序:
#include <avr/io.h>
typedef unsigned char INT8U;
typedef struct
{
INT8U a:1;
INT8U b:7;
} BTS;
main()
{
INT8U i=0x00;
INT8U j=0xFF;
BTS bit_t;
while(1)
{
bit_t.a = i;
bit_t.b = j;
i++;
j--;
}
}
软件仿真结果:
第一轮:开始时,bit_t = 0xFF,i = 0x00,j=0xFF
bit_t.a = i; // 此时:bit_t = 0xFE,最低位置0了
bit-t.b = j; // 此时:bit_t = 0xFE, j低7bit位111 1111B
第二轮:开始时,bit_t = 0xFE,i = 0x01,j=0xFE
bit_t.a = i; // 此时:bit_t = 0xFF,最低位置1了
bit-t.b = j; // 此时:bit_t = 0xFD, j低7bit位111 1110B
第三轮:开始时,bit_t = 0xFD,i = 0x02,j=0xFD
bit_t.a = i; // 此时:bit_t = 0xFC,注意:最低位置0了
bit-t.b = j; // 此时:bit_t = 0xFA, j低7bit位111 1101B
好了,看出结果了吧。
实际应用:
位域实际是很有用的,比如最近使用ADF7021,配置寄存器为32bit的,其中某些bit表示不同的设置,这时使用带位域的一个共用体,设置寄存器非常方便。
位运算
最新推荐文章于 2023-05-21 01:45:26 发布