小编Uni*_*orn的帖子

如何使用c替换位域中的位而不影响其他位

我想在32/64位数据字段中替换位/位(大于1)而不影响其他位.例如:

我有一个64位寄存器,其中第5位和第6位可以取值0,1,2,3.

5:6    
0 0
0 1
1 0
1 1     
Run Code Online (Sandbox Code Playgroud)

现在,当我读取寄存器时,我得到值0x146(0001 0 10 0 0110).现在我想将第5位和第6位的值更改为01.(现在它是10,十进制是2,我想要在没有其他位受到影响的情况下将其替换为1 e 01)并仅在修改了位5和6的情况下写回寄存器(因此在更改后变为126)

我试过这样做

reg_data=0x146
reg_data |= 1 << shift   (shift in this case is 5)
Run Code Online (Sandbox Code Playgroud)

如果我在位5和6处执行该值将变为11(0x3)而不是01(0x1),这是我想要的.

  • 我如何进行读/修改/写?
  • 如何在不影响使用C的字段的整个数据的情况下,仅替换32/64位字段中的某些位/位?

设置一点是可以的,但不止一点,我发现它有点困难.

任何建议都非常感谢.

c bit-manipulation

18
推荐指数
3
解决办法
3万
查看次数

lsusb 在 cygwin 环境中不起作用

我已经在 Windows 8 中下载并安装了 Cygwin。我连接了一个 USB 设备并试图在 Cygwin 环境中访问它。

在输入 lsusb 时,我遇到以下错误。它说找不到 lsusb 命令

-bash: lsubs: 命令未找到

我搜索了一下,发现如果我们想使用 lsusb,我们必须安装 usbutils。我尝试通过给出以下命令来做到这一点,但后来发现 cygwin 包列表中没有这样的包。

apt-cyg 安装 usbutils

知道如何通过在 cygwin 中提供 lsusb 来检查连接的 USB 设备吗?

usb cygwin

3
推荐指数
1
解决办法
3372
查看次数

标签 统计

bit-manipulation ×1

c ×1

cygwin ×1

usb ×1