問題

異なるサイズの2つのビットフィールドを比較するためにビット単位の演算子(&|など)を使用するとどうなりますか?

たとえば、0 1 1 00 0 1 0 0 0 0 1を比較すると、次のようになります。

 0 1 1 0 0 0 0 0 The smaller one is extended with zeros and pushed to the
0 0 1 0 0 0 0 1 most-significant side.
 

または...

 0 0 0 0 0 1 1 0 The smaller one is extended with zeros and pushed to the
0 0 1 0 0 0 0 1 least-significant side.
 

または...

 0 1 1 0 The longer one is truncated from its least-significant side,
0 0 1 0 keeping its most significant side.
 

または...

 0 1 1 0 The longer one is truncated from its most-significant side,
0 0 0 1 keeping its least-significant side.
 

  ベストアンサー

ビット単位の演算子は常にプロモートされたオペランドで動作します。したがって、1つの(または両方の)ビットフィールドが署名されているかどうかに依存する可能性があります(サイン拡張が発生する可能性があります)。

したがって、バイナリ値 0 1 1 0 を持つビットフィールドは int 6 に昇格し、バイナリ値 0 0 1 0 0 0 0 1 を持つビットフィールドは int 33 に昇格します。

  同じタグがついた質問を見る

c++bit-manipulationlow-levelbit-fields