这更像是一个哲学问题,但我在代码库中看到过很多次,但并不真正理解这种编程方法是如何形成的。
假设您必须将位 2 和 3 设置为某个值 x 而不更改 uint 中的其他值。这样做非常简单,也是一项常见的任务,我倾向于这样做:
uint8_t someval = 0xFF; //some random previous value
uint8_t x = 0x2; //some random value to assign.
someval = (somval & ~0xC) | (x << 2); //Set the value to 0x2 for bits 2-3
我已经看到代码改为使用“|” 使用“+”:
uint8_t someval = 0xFF; //some random previous value
uint8_t x = 0x2; //some random value to assign.
someval = (somval & ~0xC) + (x << 2); //Set the value to 0x2 for bits 2-3
它们是等价的吗?
是的。
这个比那个好吗?
仅当您的硬件没有按位 OR 指令时,但我从未见过没有按位 OR 的处理器(即使是小型 PIC10 处理器也有 OR 指令)。
那么为什么有些程序员会倾向于使用'+'而不是'|'呢?我在这里错过了一些非常明显,超级强大的优化吗?