Java 什么';在保留剩余字节的同时翻转字节中一位的正确方法是什么?

Java 什么';在保留剩余字节的同时翻转字节中一位的正确方法是什么?,java,bitwise-operators,bit-shift,Java,Bitwise Operators,Bit Shift,[编辑] 我意识到,不幸的是,我把问题简单化了,而答案并没有真正帮助我,所以我正在重新措辞 因此,在我的情况下,我有一个传入字节流(示例),其中唯一可能设置的位是第一位(0000 | 0001) 那么,假设我得到了一系列这样的结果: 0000,000**0**, 0000,000**1**, 0000,000**0**, 0000,000**1**, 0000,000**0**, 0000,000**0**, 0000,000**0**, 0000,000**0** 我将相关位设置为粗体,以便

[编辑]

我意识到,不幸的是,我把问题简单化了,而答案并没有真正帮助我,所以我正在重新措辞

因此,在我的情况下,我有一个传入字节流(示例),其中唯一可能设置的位是第一位(0000 | 0001)

那么,假设我得到了一系列这样的结果:

0000,000**0**,
0000,000**1**,
0000,000**0**,
0000,000**1**,
0000,000**0**,
0000,000**0**,
0000,000**0**,
0000,000**0**
我将相关位设置为粗体,以便更清楚地了解我实际收集的内容

因此,当这些“比特”到达时,我需要将它们分类为如下所示: 00001010


我是通过将现有值移位>>1,然后将移位>1的传入值相加)+incomingSample来实现的
&
都不用于切换位。为此,您需要使用
^
。但是0x40确实是翻转第6位的正确值(按您的说法是“第7位”)。

要翻转第3位:

 final int N = 3;
 b = (byte) (b ^ (1 << N));
final int N=3;

b=(字节)(b^(1)您是否尝试了0x40以查看它是否有效?请阅读此处:最简单和最可读的方法-使用位集类。当然,效率不如直接操作字节数组。您可以使用逻辑右移键,即
(aggregateByte>>>1)|(incomingSample@harold,很好的建议!我忽略了那个接线员。@Chris可能“更好”但是,
&
对于OP来说肯定是错误的运算符,他们需要打开一点。是的!只是重新思考了一下。答案被删除了。我编辑了我的问题,因为我意识到我过于简化了。@Dr.Dredel正如harold已经提到的,
确实是适合您情况的运算符。:-D
 final int N = 3;
 b = (byte) (b ^ (1 << N));