猿问

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

int temp = 0x5E; // in binary 0b1011110.

有没有一种方法可以检查temp中的第3位是1还是0,而无需移位和屏蔽。


只想知道是否为此有一些内置函数,还是我被迫自己写一个。


慕尼黑5688855
浏览 672回答 3
3回答

红颜莎娜

在C语言中,如果要隐藏位操作,可以编写一个宏:#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))并以此方式检查右端的第 n 位:CHECK_BIT(temp, n - 1)在C ++中,可以使用std :: bitset。

慕运维8079593

检查是否设置了N位(从0开始):temp & (1 << N)没有内置功能。

紫衣仙女

如果是C ++,我只会使用std :: bitset。简单。直截了当。没有机会犯下愚蠢的错误。typedef std::bitset<sizeof(int)> IntBits;bool is_set = IntBits(value).test(position);还是这么愚蠢template<unsigned int Exp>struct pow_2 {&nbsp; &nbsp; static const unsigned int value = 2 * pow_2<Exp-1>::value;};template<>struct pow_2<0> {&nbsp; &nbsp; static const unsigned int value = 1;};template<unsigned int Pos>bool is_bit_set(unsigned int value){&nbsp; &nbsp; return (value & pow_2<Pos>::value) != 0;}&nbsp;bool result = is_bit_set<2>(value);
随时随地看视频慕课网APP
我要回答