我有一些int类型。它位于[0,255]之内。也就是说,包括8位。我需要经常检查一下:
2(int)= 00000010(二进制)
1. The bit 6 and bit 7 must be equal to 0 and 1 respectively. And I check it like this:
if ((!(informationOctet_ & (1 << 6))) && (informationOctet_ & (1 << 7)))
{
...
}
但它不是很易读,是否可能 - 做某事&#34;美丽&#34;? 我不能使用std :: bitset,我的头说它浪费了资源,你不能没有它。
答案 0 :(得分:3)
有两种合理的解决方案:将所有无关位设置为零,然后测试结果,或将无关位设置为1并测试结果:
(x & 0xC0) == 0x80
(x | ~0xC0) == ~0x40
哈罗德在评论中指出,第一种形式更为常见。这种模式很常见,编译器的优化器会识别它。
存在其他形式,但它们模糊不清:((x ^ 0x80) & 0xC0 == 0)
同样有效,但不太清楚。有些ISA无法直接加载大常量,因此它们使用等效的((x>>6) & 0x3) == 0x2
。不要为此烦恼,你的优化器会。
答案 1 :(得分:1)
你可以应用一些掩蔽技术,
int i = 246; // Lets say any value.
int chk = ( i & 00000110b ); // eliminates all other bits except 6th & 7th bit
if (chk == 2) // because we want to check 6th bit is 0 & 7th is 1, that becomes 2 value in decimal
printf("The 6th bit is 0 & 7th bit is 1");
else
printf("Either 6th bit is not 0 or 7th bit is not 1, or both are not 0 & 1 respectivly");