0

1バイトで2ビット(範囲00〜11、したがって0〜3)をランダムに反転できるメソッドをどのように作成できますか?

例

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 ?
    }
4

3 に答える 3

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はそれを行うための賢明な方法です。

于 2013-01-09T20:10:19.573 に答える
2

コードに基づく:

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

最後の行は、2つのシフトされたランダムビットでバイトをXORするだけです。

于 2013-01-09T21:24:15.160 に答える
1

インデックスnにビットを設定する場合は、次を使用します。

b |= 1 << n;

インデックスで少し設定を解除したい場合はn、以下を使用します。

b &= ~(1 << n);

または、BitSet(十分に便利な.flip()メソッドがあります)を使用します。

于 2013-01-09T19:45:36.973 に答える