我想在C#中随机使用uint,我做得对吗?
Random ran;
a[i] = (uint)ran.Next(int.MaxValue); //random only gets to maxInt
if (ran.Next(2) == 1)
a[i] = (uint)(a[i] | (1 << 31));
让我感到困惑的另一件事是我不能把它写成(uint)(a[i] | (uint)(1 << 31))
。
答案 0 :(得分:4)
您是否尝试过运行代码?它应立即抛出NullReferenceException
,因为您没有初始化ran
随机生成器。
您可以在int.MinValue
和int.MaxValue
中简单地获取随机数据并将其转换为uint
<{1}} 1>}
unchecked
> >
Random ran = new Random();
a[i] = (uint)ran.Next(int.MinValue, int.MaxValue);
答案 1 :(得分:1)
要获得整个可能范围的随机uint
,我们不应该使用Random.Next(int,int)
,因为第二个参数是独占上限。
(即它永远不会生成二进制值01111111111111111111111111111111)。
我认为Random.Next()
是合适的,但正如 MarcinJuraszek 指出的那样,这不会产生所需范围的一半。
因此,如果您确实需要全部可能的结果,我想是时候了:
var ran = new Random();
var buffer = new byte[4];
ran.GetBytes(buffer);
a[i] = BitConverter.ToUint32(buffer,0);