我有一个字节,我需要替换最后(最不重要)的位。 示例如下。
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
答案 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
新的。