int temp = 0x5E; // in binary 0b1011110.有没有这样一种方法来检查temp中的位3是1还是0,而不需要位移位和掩码。
我只想知道是否有一些内置的函数,或者我被迫自己写一个。
发布于 2009-02-07 13:15:09
检查是否设置了位N(从0开始):
temp & (1 << N)这方面没有内置的函数。
发布于 2009-02-07 16:23:03
如果是C++,我只会使用std::bitset。很简单。直截了当。没有机会犯愚蠢的错误。
typedef std::bitset<sizeof(int)> IntBits;
bool is_set = IntBits(value).test(position);或者说这种愚蠢的行为
template<unsigned int Exp>
struct pow_2 {
    static const unsigned int value = 2 * pow_2<Exp-1>::value;
};
template<>
struct pow_2<0> {
    static const unsigned int value = 1;
};
template<unsigned int Pos>
bool is_bit_set(unsigned int value)
{
    return (value & pow_2<Pos>::value) != 0;
} 
bool result = is_bit_set<2>(value);发布于 2015-08-07 02:55:21
所选择的答案实际上是错误的。下面的函数将返回位的位置或0,具体取决于该位是否实际启用。这不是发帖者所要求的。
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))这就是发帖者最初想要的。如果使能位而不是位置,则下面的函数将返回1或0。
#define CHECK_BIT(var,pos) (((var)>>(pos)) & 1)https://stackoverflow.com/questions/523724
复制相似问题