从现有int生成随机int

时间:2012-02-19 21:22:10

标签: java xor modular

考虑以下int;

int start = 287729472784;

从那个int,我需要创建一个长度只有三位数的新int,我可以使用0-9中的任何值。

但是,为了创建新的int,我不能使用任何形式的已存在的随机数生成器。

我想知道是否可以使用模块化 xor 位移 - 操作以某种方式减少数量。比如xor与前一个数字的最后一个数字,但我不确定这是否可能。

基本上我需要从起始int创建一个三位长的int,理想情况下将起始int减少到三位数。

我希望这是有道理的,我会感激任何意见。

由于

3 个答案:

答案 0 :(得分:3)

不确定是否了解您的需求,但如果您希望从另一个号码生成3位数字,那么模数函数可能会对您有所帮助:

var startNumber = 287729472784;
var modifiedNumber = startNumber % 1000;

如果您希望每个代更改一个伪随机的modifiedNumber,您可以在几毫秒内使用时间:

var startNumber = 287729472784;
var modifiedNumber = startNumber * new Date().getTime() % 1000;

我希望它会有所帮助。

VAL

答案 1 :(得分:1)

嗯。我不明白这个问题,但是...... start % 1000会产生start的最不重要的3位数(但是要注意负值)?

答案 2 :(得分:1)

最佳答案实际上取决于最终号码的使用。由于SHA1的开始是合理的“随机”,因此使用%1000就足够了 - 如果您要查找的只是表中的哈希值,那么您将在所有可能的SHA1输入范围内获得良好的分布。

但是,如果你正在寻找一个转换,其中3位数字与输入之间几乎没有或没有关系(意思是,不仅仅是模数......),你需要一些方法将所有的比特打入结果。如果是这种情况,我建议使用CRC16这样的转换。将SHA1值输入您最喜欢的CRC16例程,然后返回其模数1000,记住某些结果会比其他结果更频繁地出现。