为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
慕尼黑5688855 2019-11-26 14:30:40
int temp = 0x5E; // in binary 0b1011110.有没有一种方法可以检查temp中的第3位是1还是0,而无需移位和屏蔽。只想知道是否为此有一些内置函数,还是我被迫自己写一个。
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

在C语言中,如果要隐藏位操作,可以编写一个宏:


#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))

并以此方式检查右端的第 n 位:


CHECK_BIT(temp, n - 1)

在C ++中,可以使用std :: bitset。


查看完整回答
反对 回复 2019-11-26
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

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


temp & (1 << N)

没有内置功能。


查看完整回答
反对 回复 2019-11-26
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

如果是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);


查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 673 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信