我是编程新手,我有一个问题希望能得到一些帮助。
我有一个二进制值0100 0001 0000 0001,该值已分配给变量名valhex。我应该使用按位AND运算符使第13位到第3位保持其当前值,而所有其他位都设置为零,然后将结果存储回valhex变量中。我应该只使用一行C代码来执行此操作。
到目前为止,我所拥有的只是这个:
unsigned int valhex = valhex&0000000100000000;
我知道这是不对的,但这是我所能做到的。我不知道将&符号放在变量和二进制文件的相对位置。我也不确定是否通过将0、1、2、14、15位设为零来做正确的事情。我先感谢您为您提供的任何帮助。
答案 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。