Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何将数组的位翻转为随机值_Java_Bit Manipulation - Fatal编程技术网

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

Java如何将数组的位翻转为随机值,java,bit-manipulation,Java,Bit Manipulation,你怎么能创建一个可以在一个字节中随机翻转2位(范围为00-11,因此为0-3)的方法呢 范例 我在做什么 private static void coinFlip(byte theByte) { Integer mode = new Random().nextInt(3); byte value = mode.byteValue(); byte tmp = value & 255; tmp = tmp &g

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

范例

我在做什么

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

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

b |= 1 << n;
b &= ~(1 << n);

或者使用(具有足够方便的
.flip()
方法)。

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

b |= 1 << n;
b &= ~(1 << n);

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

使用与您使用的方法类似的方法填写,我认为这应该可以:

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;
}
private静态字节coinFlip(byte theByte)
{
//获取格式为000xx000的随机值
整数模式=new Random().nextInt(3);
字节值=模式。字节值();

value=value使用与您使用的方法类似的方法填写,我认为这应该有效:

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;
}
private静态字节coinFlip(byte theByte)
{
//获取格式为000xx000的随机值
整数模式=new Random().nextInt(3);
字节值=模式。字节值();
value=value基于您的代码:

   private static byte coinFlip(byte theByte)
    {
        Integer mode = new Random().nextInt(3);
        byte value = mode.byteValue();
        return (byte)(theByte ^ (value << 3));
    }
private静态字节coinFlip(byte theByte)
{
整数模式=new Random().nextInt(3);
字节值=模式。字节值();
返回(字节)(字节^(值基于您的代码):

   private static byte coinFlip(byte theByte)
    {
        Integer mode = new Random().nextInt(3);
        byte value = mode.byteValue();
        return (byte)(theByte ^ (value << 3));
    }
private静态字节coinFlip(byte theByte)
{
整数模式=new Random().nextInt(3);
字节值=模式。字节值();


return(byte)(byte^(值进化算法作业?进化算法作业?flip不会随机更改它们。我需要两个位翻转并将其推回到相同的byteNo,但您可以随机选择整数;)您能给我举个例子吗?我对位集不是最熟悉,只需创建一个
新位集(8)
,它将创建一个由8位(因此是一个字节)组成的位集,所有位都以0开头。然后根据需要切换到此位集。或者,使用
bitset.valueOf(byte[])
而不是无参数构造函数获取位集,然后使用
bitset.set(index,value)修改有问题的位
可能是一种更直观的用法。flip不会随机更改它们。我需要两个位的flip并将其推回相同的byteNo,但你可以随机选择整数;)你能给我举个例子吗?我对位集不是最熟悉,只需创建一个
新位集(8)
,它将创建一个8位的位集(因此是一个字节),开始时全部设置为0。然后根据需要切换到此位集。或者,使用
bitset.valueOf(Byte[])
而不是无参数构造函数获取位集,然后使用
bitset.set(index,value)修改有问题的位
可能是一种更直观的用法。在您的示例中,maskedByte来自何处?为什么要做这部分-->字节掩码=(255-3)创建位掩码。现在来看,这实际上并不正确,但这里的想法是:二进制:(11111111-00000011)这会保留字节中的其他位吗?这就是想法,是的。如果我们从10101010:10101010&11100111=10100010开始,然后000xx000 | 10100010=101xx010。在您的示例中,maskedByte从何而来?为什么要这样做-->字节掩码=(255-3)创建一个位掩码。现在来看,这实际上并不正确,但这里有一个想法:二进制:(11111111-00000011)这会保留字节中的其他位吗?这就是想法,是的。如果我们从10101010:10101010&11100111=10100010开始,然后是000xx000 | 10100010=101xx010。我的朋友,你是赢家!要翻转示例/图像中的位,你应该使用
int
而不是
Integer
@starblue如何转换为字节值为'int'@femtoRgon时,如果第二个操作数为1(0^1=1,1^1=0),则可以将XOR视为翻转,如果第二个操作数为0(0^0=0,1^0=1),则可以不翻转。因此,我们正在随机翻转这两个位。我的朋友,你是赢家!要翻转示例/图像中的位,你应该使用
int
而不是
Integer
@starblue如何使用“int”@femtoRgon转换为字节值,如果第二个操作数是1(0^1=1,1^1=0),你可以将XOR视为翻转,如果它为0(0^0=0,1^0=1),则不翻转。因此,我们在随机基础上翻转这两个位。