Red de conocimiento informático - Problemas con los teléfonos móviles - Rutina C# para encontrar el significado original de uint y la intención aquí

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;

//OK -- conversión explícita:

uint y = (uint)3.0;