我在字段类型Byte中有一些数据(我在字节中保存了8个输入,每个位都是一个输入)。 如何只更改该字段中的一个输入(字节),但不丢失其他信息(例如,将第七位更改为一,或将第六位更改为零)?
答案 0 :(得分:25)
将第七位设置为1:
b = (byte) (b | (1 << 6));
将第六位设置为零:
b = (byte) (b & ~(1 << 5));
(位位置实际上是基于0的,所以“第七位”映射到1 << 6
而不是1 << 7
的原因。)
答案 1 :(得分:13)
将b
声明为原始类型byte
:
byte b = ...;
然后你可以使用组合二进制操作和赋值的复合赋值运算符(这不适用于Byte
):
b |= (1 << bitIndex); // set a bit to 1
b &= ~(1 << bitIndex); // set a bit to 0
如果没有赋值运算符,则需要强制转换,因为|
和&
操作的结果是int
:
b = (byte) (b | (1 << bitIndex));
b = (byte) (b & ~(1 << bitIndex));
演员表隐含在复合赋值运算符中,请参阅Java Language Specification。
答案 2 :(得分:1)
设置位使用:
$(document).ready(function(e) {
//alert
$('a#alert').click(function(){
modal({
type : 'alert',
title : 'Alert',
text : "Simple Message!"
});
});
});
要获得一点价值:
public final static byte setBit(byte _byte,int bitPosition,boolean bitValue)
{
if (bitValue)
return (byte) (_byte | (1 << bitPosition));
return (byte) (_byte & ~(1 << bitPosition));
}
答案 3 :(得分:0)
请注意,“Byte”包装类是不可变的,您需要使用“byte”。
答案 4 :(得分:0)
你真的应该自己去研究和,或者和xor的掩码函数 - 它们允许你同时验证,验证或改变...字节结构中的一个,一些或所有位在一个声明中。
我不是一个通过交易的java程序员,但是它来自C并且在线快速搜索似乎表明对这些按位操作的支持。
有关此技术的更多信息,请参阅this Wikipedia article。