我需要生成范围为 byte
、ushort
、sbyte
、short
、int
和 uint
。我能够使用 C# 中的随机方法为所有这些类型生成(例如 values.Add((int)(random.Next(int.MinValue + 3, int.MaxValue - 2)));
) uint 除外,因为 Random.Next
最多只接受 int 值。
有没有简单的方法生成随机uint
?
最佳答案
最简单的方法可能是使用两次调用:一次用于 30 位,一次用于最后两个。此答案的早期版本假设 Random.Next()
具有 int.MaxValue
的包含上限,但事实证明它是排他的- 所以我们只能得到 30 个统一位。
uint thirtyBits = (uint) random.Next(1 << 30);
uint twoBits = (uint) random.Next(1 << 2);
uint fullRange = (thirtyBits << 2) | twoBits;
(当然,您可以采用两个 16 位值作为替代……或介于两者之间的各种选项。)
或者,您可以使用 NextBytes
填充一个 4 字节数组,然后使用 BitConverter.ToUInt32
.
关于c# - 生成随机单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17080112/