我试图了解如何使用按位AND提取单个字节的值。

我所拥有的是一个4字节的数组,并将最后2个字节转换为一个2字节的值。然后,我尝试从该2字节值中提取原始的单字节值。有关我的代码和值的屏幕截图,请参见附件。

我遇到的问题是我无法获取2字节值中最后一个字节的值。

我将如何使用Bitwise AND进行此操作?



谢谢你的帮助,

理查德·休斯

最佳答案

我遇到的问题是我无法获取2字节值中最后一个字节的值。


您的2字节整数由值3和4组成(因为您的指针指向a[1])。正如您在测试中已经看到的那样,可以通过应用掩码3来获得0xFF。现在,要获取4,您需要删除低位并移位该值。在您的示例中,通过使用掩码0xFF00,您可以有效地从16位数字中删除3,但是将4保留在2字节数字的高字节中,该值是1024 == 2^10-第11位设置,它是第二个字节中的第三位(从最小代表数开始)

您可以将结果右移8位以得到4,否则可以完全忽略掩码,因为仅向右移最低位将消失:

4 == ( x>>8 )


按位测试更有趣的结果,可以通过使用一个数字获得:

int x = 7;              // or char, for what matters:
(x & 0x1) == 1;
(x & (0x1<<1) ) == 2;   // (x & 0x2)
(x & ~(0x2)) == 5;

关于c++ - C++:按位与,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10373240/

10-13 08:12