Wim*_*Wim 31
这将过滤掉您正在寻找的位:
number & (1 << position)
Run Code Online (Sandbox Code Playgroud)
如果你真的需要1或0响应,你可以使用它来使它成为一个布尔值:
!!(number & (1 << position))
Run Code Online (Sandbox Code Playgroud)
甚至更好(感谢Vadim K.):
(number >> position) & 1
Run Code Online (Sandbox Code Playgroud)
Vad*_* K. 30
此表达式计算为您要查找的位的值,0或者1:
(number >> position) & 1
Run Code Online (Sandbox Code Playgroud)
警告:此代码不符合标准. Bjarne Stroustrup说,并且他应该知道,"显然,写一个成员然后读另一个成员是违法的......"不过我把这些代码留给教育目的......
这里有一个替代方案,比如从套接字读取专有二进制协议时很有用:
#include <cstdlib>
union Value
{
struct
{
unsigned char a_ : 1;
unsigned char b_ : 1;
unsigned char c_ : 1;
unsigned char d_ : 1;
unsigned char e_ : 1;
unsigned char f_ : 1;
unsigned char g_ : 1;
unsigned char h_ : 1;
} bits_;
unsigned char charVal_;
};
int main()
{
unsigned char someValue = static_cast<unsigned char>(0x42);
Value val;
val.charVal_ = someValue;
bool isBitDSet = val.bits_.d_;
return 0;
}
Run Code Online (Sandbox Code Playgroud)