我经常希望能够像这样在 c 中做某些事情:
val1 &= 0b00001111; //clear high nibble
val2 |= 0b01000000; //set bit 7
val3 &= ~0b00010000; //clear bit 5
这种语法似乎是C语言中非常有用的补充,我想不出任何缺点,而且在位操作比较常见的低级语言中,它似乎是一件很自然的事情。
编辑:我看到了其他一些很好的替代方案,但当存在更复杂的掩码时,它们都会崩溃。例如,如果reg
是控制微控制器上I/O引脚的寄存器,并且我想同时将2、3和7号引脚设置为高电平,我可以写reg = 0x46;
,但我需要花费10秒钟思考它(并且每次阅读这些代码之后的一两天里,我可能还需要再花费10秒钟),或者我可以写reg = (1 << 1) | (1 << 2) | (1 << 6);
,但我个人认为这比只需编写`reg = 0b01000110;' 要不清晰得多。尽管我同意这种方法无法很好地扩展到8位或16位架构以外。不过我从来没有需要制作32位掩码。
#define B00000000 0
#define B00000001 1
#define B00000010 2
#define B00000011 3
...#define B10100100 0xA4
... 可能需要强制类型转换为unsigned char
。 - pmg0
是一个八进制常量。 - chqrlie