C++:按位AND

rhu*_*hes 0 c++ byte bit-manipulation bit

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

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

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

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

Bitewise AND

谢谢你的帮助,

理查德休斯

Dav*_*eas 5

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

你的2byte整数由值3和4组成(因为你的指针是a[1]).正如您在测试中已经看到的那样,您可以3通过应用蒙版来获得0xFF.现在,为了得到4你需要删除低位移动值.在您的示例中,通过使用掩码,0xFF00您可以有效地3从16位数中删除,但是您将保留2 4字节数的高字节,即1024 == 2^10第11位设置的值,这是第二个字节中的第三位(从最不具代表性算起)

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

4 == ( x>>8 )
Run Code Online (Sandbox Code Playgroud)

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

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

  • 16位变量中的值应为3和4,因为在访问索引之前,数组将转换为uint16_t (2认同)