Java如何将数组的位翻转为随机值

时间:2013-01-09 19:40:50

标签: java bit-manipulation

你怎么能创建一个方法,可以随机翻转一个字节中的2位(范围00-11因此为0-3)!

实施例 Example

Coin flip one:   111 01 111
Coin flip two:   111 11 111
Coin flip three: 111 01 111
Coin flip four:  111 10 111

我正在使用

private static void coinFlip(byte theByte)
    {
        Integer mode = new Random().nextInt(3);
        byte value = mode.byteValue();
        byte tmp = value & 255;
            tmp = tmp >> 4;
            tmp = tmp & 3;
           //Point of confusion
           //Now stuff it back in index 5 & 4 ?
    }

3 个答案:

答案 0 :(得分:2)

使用与您正在使用的方法类似的方法,我认为这应该有效:

private static byte coinFlip(byte theByte)
{
    //Get random value of form 000xx000
    Integer mode = new Random().nextInt(3);
    byte value = mode.byteValue();
    value = value << 3;
    //Mask the result byte, to format xxx00xxx
    byte mask = 231; //0b11100111
    byte maskedByte = theByte & mask;
    //return 000xx000 | xxx00xxx
    return maskedByte | value;
}

正如fge所说,BitSet是更实用的方式。

答案 1 :(得分:2)

根据您的代码:

   private static byte coinFlip(byte theByte)
    {
        Integer mode = new Random().nextInt(3);
        byte value = mode.byteValue();
        return (byte)(theByte ^ (value << 3));
    }

最后一行只是用两个移位的随机位对你的字节进行异或。

答案 2 :(得分:1)

如果要在索引n处设置位,请使用:

b |= 1 << n;

如果您想在索引n取消设置位,请使用:

b &= ~(1 << n);

或使用BitSet(方便的.flip()方法)。