c - 在 C 中使用按位与隔离位

标签 c bitwise-operators

<分区>

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

我有一个二进制值 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。

关于c - 在 C 中使用按位与隔离位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52921176/

相关文章:

c - 使用二维数组上的指针来执行函数

c - 语音 ip 的服务类型字段集

c++ - 拥有同名库的静态和动态版本是一种常见的做法吗?

c++ - bool 类型的按位运算和逻辑运算相同吗?

使用截断多项式 800516 将 CRC16 从 C 转换为 Ruby

c - 使用 struct for c 分配内存错误

bitwise-operators - 仅从OR和AND进行XOR

binary - 按位运算符 &、|、^ 可以以 10 为底进行计算吗?

python - 理解Python中的按位NOT

c - 寻找奇偶校验的程序