我想检查二进制数字在特定位置是否为“0”或“1”。
示例:
如果二进制数是:101000100
应该在第6位检查 在'1'。
等...
我用C编码,所以很明显我可以使用sprintf / scanf等等,但我想必须有更好的东西(阅读:更节省时间/更容易)!
这样做的好机制是什么?
答案 0 :(得分:30)
这将过滤掉您要找的位:
number & (1 << position)
如果您确实需要1或0响应,可以使用它来使其成为布尔值:
!!(number & (1 << position))
甚至更好(感谢Vadim K.):
(number >> position) & 1
答案 1 :(得分:30)
此表达式的计算结果为您要查找的位的值,0
或1
:
(number >> position) & 1
答案 2 :(得分:7)
警告:此代码不符合标准。 Bjarne Stroustrup says,他应该知道,“显然,写一个成员然后读另一个成员是违法的......”不过,我将此代码留给教育目的......
这是一个替代方案,比如从套接字读取专有二进制协议时很有用:
#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;
}