Tipi numerici integrali (Riferimenti per C#)Integral numeric types (C# reference)

I tipi numerici integrali sono un subset dei tipi semplici e possono essere inizializzati con valori letterali.The integral numeric types are a subset of the simple types and can be initialized with literals. Tutti i tipi integrali sono anche tipi valore.All integral types are also value types. Tutti i tipi numerici integrali supportano gli operatori aritmetici, logici bit per bit, di confrontoe di uguaglianza .All integral numeric types support arithmetic, bitwise logical, comparison, and equality operators.

Caratteristiche dei tipi integraliCharacteristics of the integral types

C# supporta i tipi integrali predefiniti seguenti:C# supports the following predefined integral types:

Tipo/parola chiave C#C# type/keyword IntervalloRange DimensioniSize Tipo .NET.NET type
sbyte Da -128 a 127-128 to 127 Valore intero con segno a 8 bitSigned 8-bit integer System.SByte
byte Da 0 a 2550 to 255 Intero senza segno a 8 bitUnsigned 8-bit integer System.Byte
short Da –32,768 a 32,767-32,768 to 32,767 Valore intero a 16 bit con segnoSigned 16-bit integer System.Int16
ushort Da 0 a 65.5350 to 65,535 Intero senza segno a 16 bitUnsigned 16-bit integer System.UInt16
int da -2.147.483.648 a 2.147.483.647-2,147,483,648 to 2,147,483,647 Valore intero a 32 bit con segnoSigned 32-bit integer System.Int32
uint Da 0 a 4.294.967.2950 to 4,294,967,295 Intero senza segno a 32 bitUnsigned 32-bit integer System.UInt32
long Da -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 Numero intero con segno a 64 bitSigned 64-bit integer System.Int64
ulong Da 0 a 18.446.744.073.709.551.6150 to 18,446,744,073,709,551,615 Intero senza segno a 64 bitUnsigned 64-bit integer System.UInt64

Nella tabella precedente ogni tipo/parola chiave C# nella colonna più a sinistra è un alias per il tipo .NET corrispondente.In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. Sono intercambiabili.They are interchangeable. Ad esempio, le dichiarazioni seguenti dichiarano variabili dello stesso tipo:For example, the following declarations declare variables of the same type:

int a = 123;
System.Int32 b = 123;

Il valore predefinito di ogni tipo integrale è zero 0.The default value of each integral type is zero, 0. Ogni tipo integrale ha costanti MinValue e MaxValue che specificano il valore minimo e massimo del tipo.Each of the integral types has the MinValue and MaxValue constants that provide the minimum and maximum value of that type.

Usare la struttura System.Numerics.BigInteger per rappresentare un intero con segno senza limiti inferiori o superiori.Use the System.Numerics.BigInteger structure to represent a signed integer with no upper or lower bounds.

Valori letterali IntegerInteger literals

I valori letterali integer possono essereInteger literals can be

  • Decimal: senza prefissodecimal: without any prefix
  • esadecimale: con il prefisso 0x o 0Xhexadecimal: with the 0x or 0X prefix
  • Binary: con il prefisso 0b o 0B (disponibile in C# 7,0 e versioni successive)binary: with the 0b or 0B prefix (available in C# 7.0 and later)

Il codice seguente illustra un esempio di ogni:The following code demonstrates an example of each:

var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;

Nell'esempio precedente viene inoltre illustrato l'utilizzo di _ come separatore di cifre, supportato a partire C# da 7,0.The preceding example also shows the use of _ as a digit separator, which is supported starting with C# 7.0. È possibile usare il separatore di cifre con tutti i tipi di valori letterali numerici.You can use the digit separator with all kinds of numeric literals.

Il tipo di un valore letterale integer è determinato dal suffisso, come indicato di seguito:The type of an integer literal is determined by its suffix as follows:

  • Se il valore letterale non ha alcun suffisso, il tipo è il primo dei tipi seguenti in cui è possibile rappresentare il relativo valore: int, uint, long ulong.If the literal has no suffix, its type is the first of the following types in which its value can be represented: int, uint, long, ulong.

  • Se il valore letterale è suffisso per U o u, il tipo è il primo dei tipi seguenti in cui è possibile rappresentare il relativo valore: uint, ulong.If the literal is suffixed by U or u, its type is the first of the following types in which its value can be represented: uint, ulong.

  • Se il valore letterale è suffisso per L o l, il tipo è il primo dei tipi seguenti in cui è possibile rappresentare il relativo valore: long, ulong.If the literal is suffixed by L or l, its type is the first of the following types in which its value can be represented: long, ulong.

    Nota

    È possibile usare la lettera minuscola l come suffisso.You can use the lowercase letter l as a suffix. Viene tuttavia generato un avviso del compilatore perché la lettera l può essere confusa con la cifra 1.However, this generates a compiler warning because the letter l can be confused with the digit 1. Per maggiore chiarezza, utilizzare L.Use L for clarity.

  • Se il valore letterale è suffisso in UL, Ul, uL, ul, LU, Lu, lU o lu, il tipo è ulong.If the literal is suffixed by UL, Ul, uL, ul, LU, Lu, lU, or lu, its type is ulong.

Se il valore rappresentato da un valore letterale Integer supera UInt64.MaxValue, si verifica un errore di compilazione CS1021.If the value represented by an integer literal exceeds UInt64.MaxValue, a compiler error CS1021 occurs.

Se il tipo determinato di un valore letterale integer è int e il valore rappresentato dal valore letterale è compreso nell'intervallo del tipo di destinazione, il valore può essere convertito in modo implicito in sbyte, byte, short``ushort, uinto ulong:If the determined type of an integer literal is int and the value represented by the literal is within the range of the destination type, the value can be implicitly converted to sbyte, byte, short, ushort, uint, or ulong:

byte a = 17;
byte b = 300;   // CS0031: Constant value '300' cannot be converted to a 'byte'

Come illustrato nell'esempio precedente, se il valore del valore letterale non è compreso nell'intervallo del tipo di destinazione, si verifica un errore del compilatore CS0031 .As the preceding example shows, if the literal's value is not within the range of the destination type, a compiler error CS0031 occurs.

È anche possibile usare un cast per convertire il valore rappresentato da un valore letterale integer nel tipo diverso dal tipo determinato del valore letterale:You also can use a cast to convert the value represented by an integer literal to the type other than the determined type of the literal:

var signedByte = (sbyte)42;
var longVariable = (long)42;

ConversioniConversions

È possibile convertire qualsiasi tipo numerico integrale in qualsiasi altro tipo numerico integrale.You can convert any integral numeric type to any other integral numeric type. Se il tipo di destinazione può archiviare tutti i valori del tipo di origine, la conversione è implicita.If the destination type can store all values of the source type, the conversion is implicit. In caso contrario, è necessario usare l' operatore cast () per richiamare una conversione esplicita.Otherwise, you need to use the cast operator () to invoke an explicit conversion. Per altre informazioni, vedere conversioni numeriche predefinite.For more information, see Built-in numeric conversions.

Specifiche del linguaggio C#C# language specification

Per altre informazioni, vedere le sezioni seguenti delle specifiche del linguaggio C#:For more information, see the following sections of the C# language specification:

Vedere ancheSee also