Java 以字节为单位设置特定位

Java 以字节为单位设置特定位,java,byte,bit-manipulation,Java,Byte,Bit Manipulation,我试图在Java字节变量中设置位。它确实提供了propper方法,如.setBit(i)。有人知道我是怎么做到的吗 我可以逐位迭代给定的字节: if( (my_byte & (1 << i)) == 0 ){ } if((my_字节)&(1设置位: myByte |= 1 << bit; myByte |=1您需要的技术是隔离所选位,然后设置或清除它。您已经有了隔离位的表达式,因为您正在使用它来测试上面的位。您可以通过对位进行ORing来设置位,也可以逐位清

我试图在Java字节变量中设置位。它确实提供了propper方法,如
.setBit(i)
。有人知道我是怎么做到的吗

我可以逐位迭代给定的字节:

if( (my_byte & (1 << i)) == 0 ){

}
if((my_字节)&(1设置位:

myByte |= 1 << bit;

myByte |=1您需要的技术是隔离所选位,然后设置或清除它。您已经有了隔离位的表达式,因为您正在使用它来测试上面的位。您可以通过对位进行ORing来设置位,也可以逐位清除位,并使用位的1的补码

boolean setBit;
my_byte = setBit
          ? myByte | (1 << i)
          : myByte & ~(1 << i);
boolean-setBit;
my_byte=setBit

?myByte|(1使用按位
)和
&
)运算符。要设置位,即将
位置的位转到
1

my_byte=my_byte |(1仅用于补充和

切换(反转)一点


myByte^=1请查看为您执行此任务的类java.util.BitSet

设置:
myByte.set(位);
要重置:
myByte.clear(位);
用bool填充:
myByte.set(位,b);
获取bool:
b=myByte.get(bit);

获取位图:
byte-bitmap=myByte.toByteArray()[0];

另请参阅xor运算符——它是该库中的第三个强大工具(请参阅Wikipedia关于屏蔽的文章).wow.这实际上是基本的计算机科学知识,但仍然让我心烦意乱,二进制世界对位集非常小心。将位设置为0和清除位之间没有区别,因此
length()
不会将那些位设置为0,这是什么意思一位?假设您试图访问第0位,而myByte包含11101101。这意味着什么?我如何控制设置的值?@Michael:设置一位意味着将其设为1。清除一位意味着将其设为0。@ernesto但它没有明确回答问题。他问如何设置位,而不是切换位。这是不同的。当然,您可以先检查位,然后根据需要切换位,但这也将是两个独立的任务…可能是@phuclv的重复,这是一个C/C++问题,而不是Java问题。@MarkrotVeel使用相同的语法。如果事实上标记应该重命名为类似C的东西-like@phuclv在我看来,它使用相同语法的事实是-没有足够的理由重复关闭。
boolean setBit;
my_byte = setBit
          ? myByte | (1 << i)
          : myByte & ~(1 << i);
    myByte ^= 1 << bit;