这个“位设置”如何在C中工作?

时间:2012-10-10 17:31:19

标签: c int bit-manipulation

unsigned int    error_bits =       

                 ( X && Y )
                 | ( A == TRUE)                         << 1
                 | ( B == TRUE)                         << 2
                 | ( C == TRUE && 
                     D == TRUE)                         << 4;

我认为这里的一般概念是根据某些条件将32位中的每一位设置为true或false - 每个位代表某个错误。

使用上面的语法,我对于设置,移位以及在哪里/为什么感到困惑。

任何澄清都是有帮助的。

谢谢。

3 个答案:

答案 0 :(得分:4)

你是对的。该行之后的位布局为:

Bits X-5: 0
Bit 4: (C == TRUE && D == TRUE)
Bit 3: 0
Bit 2: B == TRUE
Bit 1: A == TRUE
Bit 0: (X && Y)

从最重要到最不重要的位。 可以这样的东西更具可读性(品味):

unsigned int error_bits = 0;

if( X && Y )     
    error_bits |= 1;

if( A == TRUE )     
    error_bits |= 2;

if( B == TRUE )     
    error_bits |= 4;

if( C == TRUE && D == TRUE )     
    error_bits |= 16;

答案 1 :(得分:2)

如果A为TRUE,则A == TRUE将评估为1。 1&lt;&lt; 1是2,或者是仅设置第2位的整数(从最低有效编号)。 1&lt;&lt; 4是16,或者只设置第5位的整数。

答案 2 :(得分:1)

error_bits值根据:

设置
  • 当(X&amp;&amp; Y)为真时设置最低有效位(b0),即X和Y均为真。
  • 当A为真时
  • b1设置
  • 当B为真时
  • b2设置
  • b3很明显
  • 当C和D都为真时
  • b4设置