4
unsigned int    error_bits =       

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

我相信这里的一般概念是根据某些条件将 32 位中的每一个设置为真或假 - 每个位代表某事的错误。

使用上面的语法,我对设置什么、转移什么以及在哪里/为什么有点困惑。

任何澄清都是有帮助的。

谢谢你。

4

3 回答 3

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;
于 2012-10-10T17:36:29.957 回答
2

如果 A 为 TRUE,A == TRUE 将评估为 1。1 << 1 是 2,或仅设置了第 2 位的整数(从最低有效位开始编号)。1 << 4 是 16,或仅设置了第 5 位的整数。

于 2012-10-10T17:36:14.467 回答
1

error_bits值根据以下设置:

  • 当 (X && Y) 为真时设置最低有效位 (b0),即 X 和 Y 都为真。
  • 当 A 为真时设置 b1
  • 当 B 为真时设置 b2
  • b3 清晰
  • 当 C 和 D 都为真时设置 b4
于 2012-10-10T17:36:13.950 回答