English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tipi numerici C# (Number)

Di solito, i numeri possono essere divisi in due tipi: tipi di dati interi e tipi di dati a virgola mobile.

Tipi di dati interiUn numero è un intero senza punti decimali. Può essere negativo o positivo.

Tipi a virgola mobileÈ un numero con uno o più punti decimali. Può essere negativo o positivo.

C# include diversi tipi di dati per tipi di dati interi e tipo di dati a virgola mobile in base alle dimensioni in memoria e alla capacità di memorizzare numeri.

La seguente figura spiega i tipi di numeri in C#.

Tipi di dati numerici

Tipi di dati interi

I numeri di tipo intero sono numeri interi positivi o negativi con punti decimali. C# include quattro tipi di dati per numeri interi: byte, short, int e long (byte, short, int, long).

byte

Il tipo di dati byte memorizza numeri da 0 a 255. Occupa 8 bit nella memoria. Il nome chiave byte è un sinonimo della struttura Byte in .NET.

sbyte è uguale a byte, ma può memorizzare numeri negativi tra -128 e 127. Il nome chiave sbyte è un sinonimo della struttura SByte in .NET.

byte b1 = 255;
byte b2 = -128; // Errore di compilazione: il valore costante “-128” non può essere convertito in “byte”
sbyte sb1 = -128; 
sbyte sb2 = 127; 
Console.WriteLine(Byte.MaxValue); // 255
Console.WriteLine(Byte.MinValue); // 0
Console.WriteLine(SByte.MaxValue); // 127
Console.WriteLine(SByte.MinValue); // -128

short

Il tipo di dati short è un intero a segno che può memorizzare numeri tra -32.768 e 32.767. Occupa 16 bit di memoria. La parola chiave short è un alias per la struttura Int16 in .NET.

Il tipo di dati ushort è un intero unsigned. Può memorizzare solo numeri positivi tra 0 e 65535. La parola chiave ushort è un alias per la struttura UInt16 in .NET.

short s1 = -32768;
short s2 = 32767;
short s3 = 35000; // Errore di compilazione: il valore costante “35000” non può essere convertito in “short”
ushort us1 = 65535;
ushort us2 = -32000; // Errore di compilazione: il valore costante “-32000” non può essere convertito in “ushort”
Console.WriteLine(Int16.MaxValue); // 32767
Console.WriteLine(Int16.MinValue); // -32768
Console.WriteLine(UInt16.MaxValue); // 65535
Console.WriteLine(UInt16.MinValue); // 0

int

Il tipo di dati int è un intero a 32 bit con segno. Può memorizzare numeri da -2.147.483.648 a 2.147.483.647. La parola chiave int è un alias per la struttura Int32 in .NET.

uint è un intero unsigned a 32 bit. La parola chiave uint è un alias per la struttura UInt32 in .NET. Può memorizzare numeri positivi da 0 a 4.294.967.295. (Opzionale) Utilizzare l'aggiunta di U o u alla fine del numero per assegnarlo a una variabile uint.

int i = -2147483648;
int j = 2147483647;
int k = 4294967295; // Errore di compilazione: impossibile convertire implicitamente il tipo 'uint' in 'int'.
uint ui1 = 4294967295;
uint ui2 = -1; // Errore di compilazione: il valore costante “-1” non può essere convertito in “uint”
Console.WriteLine(Int32.MaxValue);//2147483647
Console.WriteLine(Int32.MinValue);//-2147483648
Console.WriteLine(UInt32.MaxValue);//4294967295
Console.WriteLine(UInt32.MinValue);//0

Il tipo int viene utilizzato anche per numeri esadecimali e binari. I numeri esadecimali iniziano con il prefisso 0x o 0X. Dalla versione 7.2 di C#, i numeri binari iniziano con il prefisso 0b o 0B.

int hex = 0x2F;
int binary = 0b_0010_1111;
Console.WriteLine(hex);
Console.WriteLine(binary);

long

Il tipo long è un intero a 64 bit con segno. Può memorizzare numeri da -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807. Assegna il tipo long alle variabili utilizzando il suffisso numerico l o L. La parola chiave long è un alias per la struttura Int64 in .NET.

Il tipo ulong memorizza numeri positivi dal 0 a 18,446,744,073,709,551,615. Se il suffisso del numero è UL, Ul, uL, ul, LU, Lu, lU o lu, il suo tipo è ulong. La parola chiave uint è un alias per la struttura UInt64 in .NET.

long l1 = -9223372036854775808;
long l2 = 9223372036854775807;
ulong ul1 = 18223372036854775808ul;
ulong ul2 = 18223372036854775808UL;
Console.WriteLine(Int64.MaxValue);//9223372036854775807
Console.WriteLine(Int64.MinValue);//-9223372036854775808
Console.WriteLine(UInt64.MaxValue); // 18446744073709551615
Console.WriteLine(UInt64.MinValue); // 0

Tipi a virgola mobile

I numeri a virgola mobile sono numeri positivi o negativi con un o più punti decimali. C# include tre tipi di numeri a virgola mobile: numero a virgola mobile, numero a precisione doppia e numero decimale (float, double, decimal).

float

Il tipo di dati float può memorizzare numeri decimali da 3.4ee038 a 3.4e + 038. Occupa 4 byte nella memoria. Il nome chiave float è l'alias della struttura Single in .NET.

Usare il suffisso di testo f o F per renderlo un tipo floating.

float f1 = 123456.5F;
float f2 = 1.123456f;
Console.WriteLine(f1); // 123456.5
Console.WriteLine(f2); // 1.123456

double

Il tipo di dati double può memorizzare numeri decimali da 1.7eˆ308 a 1.7e + 308. Occupa 8 byte nella memoria. Il nome chiave double è l'alias della struttura Double in .NET.

Usare il suffisso di testo d o D per renderlo un tipo double.

double d1 = 12345678912345.5d;
double d2 = 1.123456789123456d;
Console.WriteLine(d1); // 12345678912345.5
Console.WriteLine(d2); // 1.123456789123456

decimal

Il tipo di dati decimal può memorizzare numeri decimali da ±1.0 x 10-28 a ±7.9228 x 1028. Occupa 16 byte nella memoria. Decimal è l'alias della struttura Decimal in .NET.

Il tipo decimal ha una precisione più alta e un intervallo più piccolo rispetto ai tipi a virgola mobile e a precisione doppia, quindi è adatto per calcoli finanziari e monetari.

Usare il suffisso di testo m o M per renderlo un tipo decimal.

decimal d1 = 123456789123456789123456789.5m;
decimal d2 = 1.1234567891345679123456789123m;
Console.WriteLine(d1);
Console.WriteLine(d2);

Notazione scientifica

Usa e o E per rappresentare i poteri di 10 come parte dell'esponente di notazione scientifica, utilizza numeri a virgola mobile, numeri a precisione doppia o decimali.

double d = 0.12e2;
Console.WriteLine(d); // 12;
float f = 123.45e-2f;
Console.WriteLine(f); // 1.2345
decimal m = 1.2e6m;
Console.WriteLine(m);// 1200000