在Java中如何组合两个字节

3

如果有两个字节,如何通过从第一个字节中取前3个比特和从第二个字节中取后5个比特来生成一个新的字节?例如,对于 1110000000011111 ,如何得到 11111111 ?我正在使用Java。


00101000 操作 01000110 ==> 00100110 - irrelephant
3
请问您对Java位操作的了解和遇到的问题是什么?可以描述一下您所研究的内容,并指出具体的困难所在。我认为这个问题有点懒惰,只是想要答案而没有付出努力...但这只是我的看法。请展示您对该主题的研究成果以及您不理解的具体部分。请提供您正在尝试的代码示例、注释等。 - Acapulco
1
将“11111111”作为字节表示,其值为“-1”。 - Hachi
你还没有解释你所研究的内容。你卡在哪里,为什么卡住了,你尝试了什么等等。这是一篇不错的阅读材料:http://www.catb.org/esr/faqs/smart-questions.html#before - Acapulco
@Acapulco,谢谢!将来会考虑。如果这是一个答案而不是评论,我会接受的。 - Display Name
显示剩余3条评论
3个回答

10

byte b1, b2;

获取前三个比特位: b1 & 0xE0

获取后五个比特位: b2 & 0x1F

拼接: b1 | b2


Java可以允许以下代码:byte b1 = (byte)0xE0, b2 = 0x1F, b3 = (byte)(b1 | b2); 它的结果是 -1。这样可以吗? - Display Name
是的,请查看您问题下面Hachi的评论。 - irrelephant

3

2

使用掩码 0xE0 (11100000) 和 0x1F (00011111),您可以屏蔽掉不需要的位并将它们进行按位或运算:

byte b1 = 123; // 01111011
byte b2 = 50;  // 00110010

byte b3 = (b1 & 0xE0) | (b2 & 0x1F);  // = 114  01110010

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接