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 に答える