首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C/C++检查是否设置了一位,即int变量

C/C++检查是否设置了一位,即int变量
EN

Stack Overflow用户
提问于 2009-02-07 13:10:47
回答 22查看 319.7K关注 0票数 120
代码语言:javascript
运行
复制
int temp = 0x5E; // in binary 0b1011110.

有没有这样一种方法来检查temp中的位3是1还是0,而不需要位移位和掩码。

我只想知道是否有一些内置的函数,或者我被迫自己写一个。

EN

回答 22

Stack Overflow用户

发布于 2009-02-07 13:15:09

检查是否设置了位N(从0开始):

代码语言:javascript
运行
复制
temp & (1 << N)

这方面没有内置的函数。

票数 98
EN

Stack Overflow用户

发布于 2009-02-07 16:23:03

如果是C++,我只会使用std::bitset。很简单。直截了当。没有机会犯愚蠢的错误。

代码语言:javascript
运行
复制
typedef std::bitset<sizeof(int)> IntBits;
bool is_set = IntBits(value).test(position);

或者说这种愚蠢的行为

代码语言:javascript
运行
复制
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);
票数 31
EN

Stack Overflow用户

发布于 2015-08-07 02:55:21

所选择的答案实际上是错误的。下面的函数将返回位的位置或0,具体取决于该位是否实际启用。这不是发帖者所要求的。

代码语言:javascript
运行
复制
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))

这就是发帖者最初想要的。如果使能位而不是位置,则下面的函数将返回1或0。

代码语言:javascript
运行
复制
#define CHECK_BIT(var,pos) (((var)>>(pos)) & 1)
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/523724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档