在C#中,如何生成一个带有最大值的伪随机uint?(不需要最小值。)似乎有很多问题要求完全随机,但没有一个带有上限的问题。
澄清一下:这个上限可以超过int.MaxValue,所以只转换Random.Next(int)是没有用的。
澄清一下:这个上限可以超过int.MaxValue,所以只转换Random.Next(int)是没有用的。
您可以简单地生成介于Int32.MinValue
和Int32.MaxValue
之间的数字,并将其向上移动半个范围:
var random = new Random();
int number = random.Next(Int32.MinValue, Int32.MaxValue);
uint uintNumber = (uint)(number + (uint)Int32.MaxValue);
random.Next(Int32.MinValue, Int32.MinValue + maximum)
吗?(考虑到第一个整数可能比 Int32.MaxValue / 2
更大,导致溢出) - AlphaModder这个想法是生成一个随机的4字节数组,然后无论你将其转换成Int32
还是UInt32
都可以,这取决于你:
var buffer = new byte[sizeof(uint)];
new Random().NextBytes(buffer);
uint result = BitConverter.ToUInt32(buffer, 0);
result = (result % (max - min)) + min;
这个技巧可以解决它
static void Main(string[] args)
{
uint MaxValue = 5555;
uint value;
var rnd = new Random();
var bytes = new byte[4];
do
{
rnd.NextBytes(bytes);
value = BitConverter.ToUInt32(bytes, 0);
} while (value > MaxValue);
}
(uint)random.Next(10000)
? - Tim Schmelterint
。我需要一个uint
。 - AlphaModderint.MaxValue
更大的uint
,这就失去了意义,因为这是有可能的。 - AlphaModder