Стоит ли предпочесть сложение или логический оператор ИЛИ, если оба будут давать одинаковый результат?

Должен ли я предпочесть + (дополнение) оператор или | (или) оператор, если оба дадут одинаковый результат?

Я понимаю, что сложение и логическое ИЛИ — разные вещи. Но иногда они делают то же самое в некоторых макросах, особенно при игре с байтами и битами. Какой из них я предпочитаю в этом случае?

Пример:

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;

Выход:

Word1 = 640
Word2 = 640

1

Решение

При манипулировании битовыми комбинациями логические операторы являются подходящими. При манипулировании числовыми значениями подходят арифметические операторы.

6

Другие решения

Я бы не стал смешивать битовые и арифметические операции в одном выражении, поэтому я бы написал

Word1 = (Byte1 * 256) + Byte2;

но

Word2 = (Byte1 << 8) | Byte2;

Читаемость — это единственное, о чем нужно беспокоиться, потому что хороший оптимизатор должен генерировать одинаковый точный код для обоих выражений.

1

По вопросам рекламы [email protected]