e.g。如果我有一个整数,我想检查20-25位的值是什么,或者我只是想检查其中一个位是0还是1,我该怎么做?
答案 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;
}