Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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_Math_Binary_Integer Overflow - Fatal编程技术网

Java 有没有一种简单的方法可以反转出现溢出的整数函数?

Java 有没有一种简单的方法可以反转出现溢出的整数函数?,java,math,binary,integer-overflow,Java,Math,Binary,Integer Overflow,我正在尝试为java.util.Random setSeed和next函数创建一个反向函数。本质上,我希望能够输入一个长值(在它被截断为48位之前),并返回一个种子或种子家族,该种子或种子家族将为第一个nextLong()调用生成该值。其相关源代码如下: 固定种子(长种子) seed=(seed^0x5deec66dl)&((1L想知道您真正想要的是一个随机数生成器,其中生成的第一个数字是一个特定的值 class MyRandom extends java.util.Random { l

我正在尝试为java.util.Random setSeed和next函数创建一个反向函数。本质上,我希望能够输入一个长值(在它被截断为48位之前),并返回一个种子或种子家族,该种子或种子家族将为第一个nextLong()调用生成该值。其相关源代码如下:

固定种子(长种子)


seed=(seed^0x5deec66dl)&((1L想知道您真正想要的是一个随机数生成器,其中生成的第一个数字是一个特定的值

class MyRandom extends java.util.Random {
    long targetValue;
    long offset;
    int count=0;

    public MyRandom(long target) {
        this.targetValue = target;
   } 

   public long nextLong() {
        long rnd = super.nextLong();
        if(count++==0) {
            offset = target - rnd;
        }
        return rnd + offset;
   }
}
在第一次调用nextLong时,它将设置偏移量并返回目标。
在所有调用中,它将返回按固定数量移位的随机数。这将提供一个统一的分布。

想知道您真正想要的是一个随机数生成器,其中生成的第一个数字是一个特定的值

class MyRandom extends java.util.Random {
    long targetValue;
    long offset;
    int count=0;

    public MyRandom(long target) {
        this.targetValue = target;
   } 

   public long nextLong() {
        long rnd = super.nextLong();
        if(count++==0) {
            offset = target - rnd;
        }
        return rnd + offset;
   }
}
在第一次调用nextLong时,它将设置偏移量并返回目标。
在所有调用中,它将返回按固定数量移位的随机数。这将提供一个均匀的分布。

它不仅溢出,而且截断的结果还有其16个最高有效位被屏蔽。可以计算产生特定
的种子作为第一个结果,但这取决于d关于
nextLong()
计算的更完整细节。看看,它提出了一个非常类似的问题。
nextLong()
使用两个对底层LCG的连续调用中的32位,只从每个状态中取中间的32位。这可能并不“难”从加密的角度来解决,但我也不认为这是一个微不足道的问题。可能更多的是一个数学问题,如果你在这里没有得到答案,请尝试math.stackexchange.com。它不仅溢出,而且截断的结果还有它的16个最高有效位被屏蔽。计算一个种子可能会产生一个特定的
long
作为第一个结果,但这将取决于
nextLong()
计算的更完整细节。请看,它提出了一个非常类似的问题。
nextLong()
使用两个对底层LCG的连续调用中的32位,只从每个状态中取中间的32位。这可能并不“难”在加密的意义上解决,但我也不认为这是一个微不足道的问题。可能更多的是一个数学问题,如果你在这里没有得到答案,请尝试math.stackexchange.com。谢谢,但是不,我想要一种方法来控制内置于java.util.random中的RNG的第一个输出。谢谢,我想要一种方法来控制第一个输出y表示内置在java.util.Random中的RNG
class MyRandom extends java.util.Random {
    long targetValue;
    long offset;
    int count=0;

    public MyRandom(long target) {
        this.targetValue = target;
   } 

   public long nextLong() {
        long rnd = super.nextLong();
        if(count++==0) {
            offset = target - rnd;
        }
        return rnd + offset;
   }
}