我经常希望我可以在 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 位掩码。