我是编程新手,有一个问题希望能得到一些帮助。
我有一个二进制值 0100 0001 0000 0001,它已分配给变量名 valhex。我应该使用按位与运算符使第 13 位到第 3 位保持它们的当前值,并将所有其他位设置为零,然后将结果存储回变量 valhex。我应该只使用一行 C 代码来做到这一点。
到目前为止我只有这个:
unsigned int valhex = valhex&0000000100000000;
我知道这是不对的,但这是我所能得到的。我不知道在哪里放置与变量和二进制相关的 & 符号。我也不确定通过将位 0、1、2、14、15 设为零来做正确的事情。我提前感谢你能给我的任何帮助。
在按位与(如果你还记得你的真值表)中,与 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。