1

如果两者都会给出相同的结果,我应该更喜欢+(加法)运算符还是(或)运算符?|

我知道加法和逻辑或是不同的东西。但是它们有时在某些宏中会做同样的事情,尤其是在处理字节和位时。在这种情况下我应该更喜欢哪一个?

例子:

uint8_t Byte1 = 0x02;   // 0000 0010
uint8_t Byte2 = 0x80;   // 1000 0000
uint16_t Word1, Word2;  // 0000 0010 1000 0000 = 640 = 0x0280

Word1 = (Byte1 << 8) + Byte2;
Word2 = (Byte1 << 8) | Byte2;

std::cout << "Word1 = " << Word1 << std::endl;
std::cout << "Word2 = " << Word2 << std::endl;

输出:

字 1 = 640
字 2 = 640

4

2 回答 2

6

在操作位模式时,逻辑运算符是合适的。操作数值时,算术运算符是合适的。

于 2012-09-28T21:20:53.727 回答
1

我会避免在同一个表达式中混合位运算和算术运算,所以我会写

Word1 = (Byte1 * 256) + Byte2;

Word2 = (Byte1 << 8) | Byte2;

可读性是这里唯一需要担心的事情,因为一个好的优化器应该为两个表达式生成完全相同的代码。

于 2012-09-28T21:25:48.963 回答