比较不同大小的位域

Max*_*xpm 7 c++ bit-manipulation low-level bit-fields

如果使用位运算符(会发生什么事&,|等)来比较两个大小不同的位域?

例如,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.
Run Code Online (Sandbox Code Playgroud)

要么...

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.
Run Code Online (Sandbox Code Playgroud)

要么...

0 1 1 0 The longer one is truncated from its least-significant side,
0 0 1 0 keeping its most significant side.
Run Code Online (Sandbox Code Playgroud)

要么...

0 1 1 0 The longer one is truncated from its most-significant side,
0 0 0 1 keeping its least-significant side.
Run Code Online (Sandbox Code Playgroud)

Mic*_*urr 7

按位运算符始终用于提升的操作数.所以可能发生的事情可能取决于是否有一个(或两个)位域被签名(因为这可能导致符号扩展).

因此,对于您的示例值,具有二进制值的位字段0 1 1 0将被提升为int 6,并且具有二进制值的位字段0 0 1 0 0 0 0 1将被提升为int 33,并且这些操作数将与将用于任何操作的操作数一起使用. .