用C中的按位AND隔离位

时间:2018-10-22 00:48:33

标签: c bitwise-operators

我是编程新手,我有一个问题希望能得到一些帮助。

我有一个二进制值0100 0001 0000 0001,该值已分配给变量名valhex。我应该使用按位AND运算符使第13位到第3位保持其当前值,而所有其他位都设置为零,然后将结果存储回valhex变量中。我应该只使用一行C代码来执行此操作。

到目前为止,我所拥有的只是这个:

unsigned int valhex = valhex&0000000100000000;

我知道这是不对的,但这是我所能做到的。我不知道将&符号放在变量和二进制文件的相对位置。我也不确定是否通过将0、1、2、14、15位设为零来做正确的事情。我先感谢您为您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

在按位与(如果您还记得真值表)中,与1进行与运算的位保留其值,与0进行与运算的位均设置为0。因此,如果要保留13-3位,则mask在位置13-3处必须为1,而在位置2-0处应为0。另请注意,要指定二进制文字,您需要在其前面加上0b。另请注意,由于变量尚未初始化,因此不能在同一行上声明和使用该变量。最终结果是这样:

unsigned int valhex = 12345; /* some value */
valhex = valhex & 0x3ff8; /* 0x3ff8 = 0b11111111111000 */

请注意,unsigned int长于14位,您没有指定位置14及更高位置的位应该发生什么。在这种情况下,它们也将设置为0。

相关问题