Rutina C# para encontrar el significado original de uint y la intención aquí
int está firmado y representa el rango: -2147483648 a 2147483648, es decir, potencias de -2^31 a 2^31.
uint no está firmado y su rango de representación es: 2^32, es decir, de 0 a 4294967295.
uint se puede utilizar en decimal, binario y hexadecimal.
Y los valores long, ulong, float, double, decimal y otros predefinidos se pueden convertir implícitamente. Pero debe prestar atención a si el valor está dentro del rango convertible; de lo contrario, se producirá una excepción.
Esta palabra clave representa un tipo de número entero que puede almacenar valores según el tamaño y rango que se muestra en la siguiente tabla.
El rango 4.294.967.295 es en realidad 2^32-1, entonces, ¿por qué restar 1? En realidad, esto se debe a que en los lenguajes informáticos los números comienzan con 0.
Tenga en cuenta: el tipo uint no es compatible con CLS. Utilice el tipo int siempre que sea posible.
CLS significa, como significa CLS, Especificación de lenguaje común **** Especificación de lenguaje común.
Puede declarar e inicializar variables uint especificando un literal decimal, un literal hexadecimal o (desde C# 7.0) un literal binario. Se produce un error de compilación si el literal entero está fuera del rango de uint (es decir, es menor que Uint32.MinValue o mayor que Uint32.MaxValue).
En el siguiente ejemplo, a un número entero igual a 3.000.000.000 representado en texto decimal, hexadecimal y binario se le asigna un valor uint.
uint uintValue1 = 3000000000;
Console.WriteLine( uintValue1);
uint uintValue2 = 0xB2D05E00;
Console.WriteLine( uintValue2 )WriteLine( uintValue2);
uint uintValue3 = 0b1011_0010_1101_0000_0101_1110_0000_0000;
Console.WriteLine(uintValue3);
// El ejemplo anterior generará:
// ?3000000000
// ?3000000000
// ?3000000000
// ?3000000000
// 3000000000
Nota:
Para texto hexadecimal, puede usar el prefijo ox o 0X, para texto binario, puede usar el prefijo 0b o 0B, y para texto decimal, puede usar No se puede utilizar ningún prefijo.
A partir de C# 7.0, se han agregado algunas características para mejorar la legibilidad.
C# 7.0 permite utilizar el carácter de subrayado (_) como separador de números.
C#7.2 permite _ después del prefijo como separador de números para literales binarios o hexadecimales; los literales decimales no pueden tener guiones bajos iniciales.
Los literales enteros también pueden contener sufijos que representan el tipo. El sufijo u o 'u' significa uint o ulong, según el valor numérico del texto. El siguiente ejemplo utiliza el sufijo u para representar dos tipos de enteros sin signo. Tenga en cuenta que el primer texto es uint porque su valor es menor que Uint32.MaxValue, y el segundo texto es ulong porque su valor es mayor que Uint32.MaxValue.
Valor del objeto1 = 4000000000u;
Console.WriteLine($" {value1} ({4000000000y.GetType().Name})");
Objeto value2 = 6000000000u;
Console.WriteLine($"{value2} ({6000000000y.GetType( .Name})");
Si el literal entero no tiene sufijo, su tipo Es el primero de los siguientes tipos cuyos valores se pueden representar.
int
uint
long
ulong
Conversión
de uint a Hay conversiones implícitas predefinidas para long, ulong, float, double o decimal. Por ejemplo:
float myFloat = 4294967290;
Existe una conversión implícita predefinida de bytes, texto corto o caracteres a uint. De lo contrario, se debe utilizar la conversión. Por ejemplo, la siguiente declaración de asignación producirá un error de compilación si no se utiliza ninguna conversión.
long aLong = 22;
//Error: no hay conversión implícita de long
uint uInt1 = aLong;
// OK - conversión explícita:
uint uInt2 = (uint)aLong;
También tenga en cuenta que no hay conversión implícita de tipo de punto flotante a tipo uint. Por ejemplo, la siguiente declaración generará un error de compilación a menos que se utilice una conversión explícita:
//Error: no hay conversión implícita de double:
uint x = 3.0; p >
//OK -- conversión explícita:
uint y = (uint)3.0;