如何在C ++中检查变量的某些位?

时间:2010-11-06 18:21:06

标签: c++ c

  

可能重复:
  C/C++ check if one bit is set in, i.e. int variable

e.g。如果我有一个整数,我想检查20-25位的值是什么,或者我只是想检查其中一个位是0还是1,我该怎么做?

5 个答案:

答案 0 :(得分:7)

使用标准逻辑运算,例如逻辑AND,OR,XOR,并将其与位移组合。这应该会给你一些想法:http://en.wikipedia.org/wiki/Bit_manipulation

希望有所帮助

答案 1 :(得分:3)

您将在整数和“掩码”值之间使用按位AND运算符,该值忽略所有其他位。所以像这样:

const int BIT_4 = 0x8;

// ....

int val = /* ... */;
if ((val & BIT_4) != 0)
    ; // Bit 4 is ON!
else
    ; // Bit 4 is OFF

答案 2 :(得分:2)

您可以使用按位AND运算符。

int x = SOME_VALUE;

// check 20-25 bits
if ( x & 0x3F00000 ) {
  // any of bits on
}

答案 3 :(得分:1)

int bitsToInt(int value, int s, int e) {
    int mask = ((1 << (e - s + 1)) - 1) << s;
    return (value & mask) >> s;
}

bitsToInt(7,2,3)返回1

考虑一下,如果你想要的是将几个值填充到一个int中,你可以更好地做bitfields并让编译器担心掩码和移位。

答案 4 :(得分:1)

uint32_t
get_bits_20_to_24(uint32_t i_)
{
  union {
    struct
    {
      uint32_t bits1 : 20;
      uint32_t bits2 : 5;
      uint32_t bits3 : 7;
    } s;
    uint32_t i;
  };

  i = i_;
  return s.bits2;
}