0

您如何创建一个可以随机翻转一个字节中的 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));
    }

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

于 2013-01-09T21:24:15.160 回答
1

如果要在 index 处设置一点n,请使用:

b |= 1 << n;

如果您想在 index 处取消设置n,请使用:

b &= ~(1 << n);

或者使用BitSet(它有一个足够方便的.flip()方法)。

于 2013-01-09T19:45:36.973 回答