这似乎有效,但它非常令人惊讶,并不那么清楚。有人可能“太聪明”了。更明确的方法可能是:
uint16_t change_bit(uint16_t command, unsigned int bit, bool value) { const uint16_t mask = 1u << bit; if(value) return command | mask; else return command & ~mask; }
这有一个跳跃( if ),但聪明的编译器可能会优化它。如果它不是非常性能关键的代码,那么通常更清晰。
if
请注意,在进行位级操作时,使用无符号类型通常是个好主意。