相关疑难解决方法(0)

2454
推荐指数
25
解决办法
111万
查看次数

什么是位屏蔽?

我对C编程很新,我遇到了掩码.有人可以向我解释位屏蔽的一般概念和功能吗?非常感谢例子.

c terminology bit-manipulation bitmask bitwise-operators

162
推荐指数
2
解决办法
24万
查看次数

如何在C中仅设置某个字节的某些位而不影响其余位?

假设我有一个类似于1010XXXX的字节,其中X值可以是任何值.我想将低4位设置为特定模式,比如1100,同时保持高4位不受影响.如何在C中以最快的速度完成这项工作?

c byte bitmask

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

如何使用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万
查看次数