以字节更改位值

时间:2011-01-30 17:29:45

标签: java

我在字段类型Byte中有一些数据(我在字节中保存了8个输入,每个位都是一个输入)。 如何只更改该字段中的一个输入(字节),但不丢失其他信息(例如,将第七位更改为一,或将第六位更改为零)?

5 个答案:

答案 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