【问题标题】:How does this "bit set" work in C?这个“位集”在 C 中是如何工作的?
【发布时间】:2012-10-10 17:31:18
【问题描述】:
unsigned int    error_bits =       

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

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

使用上面的语法,我对设置、移动的内容以及位置/原因感到有些困惑。

任何澄清都是有帮助的。

谢谢。

【问题讨论】:

    标签: c int bit-manipulation


    【解决方案1】:

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

    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;
    

    【讨论】:

      【解决方案2】:

      如果 A 为 TRUE,A == TRUE 将评估为 1。 1

      【讨论】:

        【解决方案3】:

        error_bits值设置依据:

        • 当 (X && Y) 为真时设置最低有效位 (b0),即 X 和 Y 都为真。
        • 当 A 为真时设置 b1
        • 当 B 为真时设置 b2
        • b3 清晰
        • 当 C 和 D 都为真时设置 b4

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-06
          • 2010-12-13
          • 2018-07-17
          • 2016-02-22
          • 2013-07-24
          • 2012-11-14
          相关资源
          最近更新 更多