我遇到的问题是我无法获得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)