これはどちらかというと哲学的な質問ですが、コードベースのあちらこちらでこれを何度も見てきましたが、このプログラミング方法がどのようになったのかはよくわかりません。
uint の他の値を変更せずに、ビット 2 と 3 を値 x に設定する必要があるとします。そうすることは非常に些細なことであり、一般的なタスクであり、私は次のようにする傾向があります。
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 命令があります)。
では、一部のプログラマーが「|」の代わりに「+」を使用する傾向があるのはなぜでしょうか? ここで、本当に明白で非常に強力な最適化が欠けていますか?