if (mode)
CLRBITS(field->flag, UFMODE_GREY);
else
SETBITS(field->flag, UFMODE_GREY);
CLRBITS
和SETBITS
只是设置为使用适当的按位运算清除和设置位的宏。 UFMODE_GREY
也是一个等同于0x0200
的宏。
答案 0 :(得分:1)
位用于将一组布尔标志压缩到较小的空间中。在C和C ++中,您引用的样式通常用于针对多个编译器和系统的API,这些编译器和系统可能选择以不同方式打包具有布尔标志的结构。 CLRBITS和SETBITS宏用于提供更清晰的声明。这比下面的内容要简单得多:
if( mode ){
field->flag = field->flag & ~0x200;
}else {
field->flag = field->flag | 0x200;
}