我正在实现一堆不同类型的伪随机数生成器来玩。我注意到线性同余生成器可以有一个 int 大小的周期,并认为我可以只使用溢出而不是模数,看看它是否更快。
唯一的障碍是溢出溢出到符号位,我需要它们都是正值。
编辑:我对几个概念很模糊,所以我正在清理这个问题,所以它更有意义。基本上这一切都归结为我试图去掉整数的符号位。我发现用 int.MinValue 对数字进行异或运算就可以了。但只有当它溢出时,如果它没有溢出,则相反。不过,我想避免额外的 if 语句。
如果有人可以向我展示一些巧妙的技巧来获取前 31 位并将它们填充到一个整数中,那将是令人愉快的。或者以某种方式将符号位设置为零可能会更好?