当我想在C#中得到一个随机单元时,我做得对吗?
我想在C#中得到一个随机单元,我做得对吗当我想在C#中得到一个随机单元时,我做得对吗?,c#,C#,我想在C#中得到一个随机单元,我做得对吗 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)); Random; a[i]=(uint)run.Next(int.MaxValue)//random只能访问maxInt if(run.Next(2)==1) a[i]=(
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));
Random;
a[i]=(uint)run.Next(int.MaxValue)//random只能访问maxInt
if(run.Next(2)==1)
a[i]=(uint)(a[i]|(1你试过运行你的代码吗?它应该立即抛出NullReferenceException
,因为你没有初始化你的随机生成器
您只需从int.MinValue
和int.MaxValue
中获取随机int,然后在未选中的上下文中将其强制转换为uint
:
您甚至试过运行代码吗?它应该立即抛出NullReferenceException
,因为您没有初始化ran
随机生成器
您只需从int.MinValue
和int.MaxValue
中获取随机int,然后在未选中的上下文中将其强制转换为uint
:
为了获得整个可能范围内的随机uint
,我们不应该使用,因为第二个参数是一个排他上界
(即,它永远不会生成二进制值011111111111111111)
我认为这是合适的,但正如马尔金库拉塞克指出的那样,这并不能产生所需范围的一半
因此,如果你真的想得到所有可能的结果,我想是时候:
var ran = new Random();
var buffer = new byte[4];
ran.GetBytes(buffer);
a[i] = BitConverter.ToUint32(buffer,0);
为了获得整个可能范围内的随机uint
,我们不应该使用,因为第二个参数是一个排他上界
(即,它永远不会生成二进制值011111111111111111)
我认为这是合适的,但正如马尔金库拉塞克指出的那样,这并不能产生所需范围的一半
因此,如果你真的想得到所有可能的结果,我想是时候:
var ran = new Random();
var buffer = new byte[4];
ran.GetBytes(buffer);
a[i] = BitConverter.ToUint32(buffer,0);
您应该使用无参数的Random.Next
重载,除非您在此处明确尝试排除int.MaxValue
作为可能的结果。当使用带参数的重载时,这是一个排他的上限。@Damien\u不信者没有参数的重载只返回正数,因此ld不足以填充uint
。我现在发布了一个替代方法,可以返回所有可能的uint
值。您应该使用Random的重载。下一步
不带参数,除非您在这里明确尝试排除int.MaxValue
作为可能的结果。当using带参数的重载。@Damien_不信者没有参数的重载只返回正数,因此它不足以填充uint
。我现在发布了一个替代方法,可以返回所有可能的uint
值。