repetir rango numeros numero generar digitos dev decimales arreglo aleatorios aleatorio c# random long-integer int64

rango - Genera valores aleatorios en C#



generar numeros aleatorios en un arreglo en c++ (9)

Aquí tienes, esto usa los servicios crytpo (no la clase Random) , que es (teóricamente) un RNG mejor que la clase Random. Podrías fácilmente hacer de esto una extensión de Random o crear tu propia clase Random donde el RNGCryptoServiceProvider es un objeto de nivel de clase.

using System.Security.Cryptography; public static Int64 NextInt64() { var bytes = new byte[sizeof(Int64)]; RNGCryptoServiceProvider Gen = new RNGCryptoServiceProvider(); Gen.GetBytes(bytes); return BitConverter.ToInt64(bytes , 0); }

¿Cómo puedo generar valores aleatorios Int64 y UInt64 usando la clase Random en C #?


Esto debería funcionar. (Es un método de extensión para que pueda llamarlo tal como llama a los métodos Next o NextDouble normales en un objeto Random ).

public static Int64 NextInt64(this Random rnd) { var buffer = new byte[sizeof(Int64)]; rnd.NextBytes(buffer); return BitConverter.ToInt64(buffer, 0); }

Simplemente reemplace Int64 con UInt64 todas partes si quiere enteros sin signo en su lugar y todos deberían funcionar bien.

Nota: Dado que no se proporcionó contexto con respecto a la seguridad o la aleatoriedad deseada de los números generados (de hecho, el OP mencionó específicamente la clase Random ), mi ejemplo simplemente trata con la clase Random , que es la preferida cuando la aleatoriedad (a menudo cuantificada como información entropía ) no es un problema. Como cuestión de interés, consulte las otras respuestas que mencionan RNGCryptoServiceProvider (el RNG proporcionado en el espacio de nombres System.Security ), que se puede usar casi de manera idéntica.


No dice cómo va a utilizar estos números aleatorios ... tenga en cuenta que los valores devueltos por Random no son "criptográficamente seguros" y no deben usarse para cosas que involucren (grandes) secretos o (muchos dinero


Otra respuesta con RNGCryptoServiceProvider lugar de Random . Aquí puede ver cómo eliminar el MSB para que el resultado sea siempre positivo.

public static Int64 NextInt64() { var buffer = new byte[8]; new RNGCryptoServiceProvider().GetBytes(buffer); return BitConverter.ToInt64(buffer, 0) & 0x7FFFFFFFFFFFFFFF; }


Puede crear una matriz de byte , llenarla con datos aleatorios y luego convertirla a long ( Int64 ) y ulong ( UInt64 ).

byte[] buffer = new byte[sizeof(Int64)]; Random random = new Random(); random.NextBytes(buffer); long signed = BitConverter.ToInt64(buffer, 0); random.NextBytes(buffer); long unsigned = BitConverter.ToUInt64(buffer, 0);


Puede usar el desplazamiento de bits para armar un número aleatorio de 64 bits a partir de números aleatorios de 31 bits, pero debe usar tres números de 31 bits para obtener suficientes bits:

long r = rnd.Next(); r <<= 31; r |= rnd.Next(); r <<= 31; r |= rnd.Next();


Siempre uso esto para obtener mi semilla aleatoria (se quita la comprobación de errores por brevedad):

m_randomURL = "https://www.random.org/cgi-bin/randnum?num=1&min=1&max=1000000000"; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(m_randomURL); StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream()); Random rand = new Random(Convert.ToInt32(stIn.ReadToEnd()));

random.org usa el ruido atmosférico para generar la aleatoriedad y aparentemente se usa para loterías y demás.


Use Random.NextBytes() y BitConverter.ToInt64 / BitConverter.ToUInt64 .

// Assume rng refers to an instance of System.Random byte[] bytes = new byte[8]; rng.NextBytes(bytes); long int64 = BitConverter.ToInt64(bytes, 0); ulong uint64 = BitConverter.ToUInt64(bytes, 0);

Tenga en cuenta que usar Random.Next() dos veces, cambiar un valor y luego ORing / adding no funciona. Random.Next() solo produce enteros no negativos, es decir, genera 31 bits, no 32, por lo que el resultado de dos llamadas solo produce 62 bits aleatorios en lugar de los 64 bits requeridos para cubrir el rango completo de Int64 / UInt64 . ( La respuesta de Guffa muestra cómo hacerlo con tres llamadas a Random.Next() embargo).


Random r=new Random(); int j=r.next(1,23); Console.WriteLine(j);