如何解决这个位操作?

时间:2011-01-28 08:56:26

标签: c# .net logic bit-manipulation

我有一个字节,我需要替换最后(最不重要)的位。 示例如下。

Original byte:      xxxx0110
Replacement byte:       1111
What I want to get: xxxx1111

Original byte:      xxxx1111
Replacement byte:       0000
What I want to get: xxxx0000

Original byte:      xxxx0000
Replacement byte:       1111
What I want to get: xxxx1111

Original byte:      xxxx1010
Replacement byte:       1111
What I want to get: xxxx1111

Original byte:      xxxx0101
Replacement byte:       0111
What I want to get: xxxx0111

4 个答案:

答案 0 :(得分:7)

 value = (byte)( (value & ~15) | newByte);

~15创建一个除了最后4位的掩码; value & {that mask}取最后4位,然后| newByte将新数据中的位置于其位置。

答案 1 :(得分:4)

这可以通过按位AND和清除位以及按位OR来设置位来完成。

要清除最低的四位,您可以使用除了那些位之外的值为1的值除外,其中它为零。像这样的一个值是~0xF,它是0xF的补码,它是四个0b1111

要设置这些位,可以使用按位OR和要设置的位。自0 OR x = x起,这就像你想要的那样有效。

最终结果将是

(x & ~0xF) | bits

编辑:根据Eamon Nerbonne的评论,你应该回到byte

(byte)((x & ~0xF) | bits)

答案 2 :(得分:0)

如果我的理解是正确的,你想要你的字节(左移4次后)与替换字节(左移4次)。然后右移4次,你就会得到理想的结果。

例如:a = 1001 1101 替换字节:0000 1011

左移4次:1101 0000 左移替换4次:1011 0000

或结果:1111

右移4次:1011(最终结果)。

也许这个链接很有用:http://www.codeproject.com/KB/cs/leftrightshift.aspx

答案 3 :(得分:-1)

trim最后4位。和append新的。