Mit*_*rax 10 language-agnostic bit-manipulation
可以说我有一个像0x448.在二进制中这是0100 0100 1000.
如何使用逐位运算将位1,2和3设置为全0或全1?当我说前三个时,我将最右边的位数作为零位.
所以,例如
比特为1:
b12 b0
0100 0100 1110
^^^
Run Code Online (Sandbox Code Playgroud)
比特为0:
b12 b0
0100 0100 0000
^^^
Run Code Online (Sandbox Code Playgroud)
我猜测将它们设置为1我使用bit-wise使用14(0x000e)的掩码?但如果是这种情况,我该如何做清除比特的类似事情呢?
有关:
sta*_*san 19
您将位设置正确:OR使用要设置的位的掩码.
位清除位非常相似:AND使用要清零的位的补码.
示例:Word 0x0448.
设置位1,2和3将是Word OR 0x000e:
0000 0100 0100 1000 = 0x0448
OR 0000 0000 0000 1110 = 0x000e
---- ---- ---- ----
= 0000 0100 0100 1110 = 0x044e
Run Code Online (Sandbox Code Playgroud)
清除位1,2和3将是Word AND 0xfff1:
0000 0100 0100 1000 = 0x0448
AND 1111 1111 1111 0001 = 0xfff1
---- ---- ---- ----
= 0000 0100 0100 0000 = 0x0440
Run Code Online (Sandbox Code Playgroud)
详细阐述了补码,用于清除的AND模式是用于设置的OR模式的逻辑NOT(每个位被尊重):
OR 0000 0000 0000 1110 = 0x000e
AND 1111 1111 1111 0001 = 0xfff1
Run Code Online (Sandbox Code Playgroud)
所以你可以使用你最喜欢的语言而不是操作,而不必弄清楚这两个值.