C ++:按位AND

时间:2012-04-29 15:11:16

标签: c++ byte bit-manipulation bit

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

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

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

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

Bitewise AND

感谢您的帮助,

理查德休斯

3 个答案:

答案 0 :(得分:5)

  

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

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

您可以将结果向右移动8位以获得1024 == 2^10,否则您可以完全忽略该掩码,因为只需向右移动,最低位将消失

4

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

4 == ( x>>8 )

答案 1 :(得分:3)

您需要添加一些位移以将屏蔽值从高字节转换为低字节。

答案 2 :(得分:0)

  

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

不确定“监视”表的来源或是否涉及更多代码,但我认为结果是正确的。记住,其中一个是高字节,因此值被移位<< 8个地方。在小端机器上,高字节将是第二个。