Tipos numéricos integrais (Referência C#)Integral numeric types (C# reference)

Os tipos numéricos integrais representam números inteiros.The integral numeric types represent integer numbers. Todos os tipos numéricos integrais são tipos de valor.All integral numeric types are value types. Eles também são tipos simples e podem ser inicializados com literais.They are also simple types and can be initialized with literals. Todos os tipos numéricos integrais suportam operadores aritméticos, bitwise lógicos, de comparaçãoe de igualdade.All integral numeric types support arithmetic, bitwise logical, comparison, and equality operators.

Características dos tipos integraisCharacteristics of the integral types

O C# é compatível com os seguintes tipos integrais predefinidos:C# supports the following predefined integral types:

palavra-chave/tipo C#C# type/keyword IntervaloRange TamanhoSize Tipo .NET.NET type
sbyte -128 a 127-128 to 127 Inteiro de 8 bits com sinalSigned 8-bit integer System.SByte
byte 0 a 2550 to 255 Inteiro de 8 bits sem sinalUnsigned 8-bit integer System.Byte
short -32.768 a 32.767-32,768 to 32,767 Inteiro de 16 bits com sinalSigned 16-bit integer System.Int16
ushort 0 a 65.5350 to 65,535 Inteiro de 16 bits sem sinalUnsigned 16-bit integer System.UInt16
int -2.147.483.648 a 2.147.483.647-2,147,483,648 to 2,147,483,647 Inteiro assinado de 32 bitsSigned 32-bit integer System.Int32
uint 0 a 4.294.967.2950 to 4,294,967,295 Inteiro de 32 bits sem sinalUnsigned 32-bit integer System.UInt32
long -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 Inteiro assinado de 64 bitsSigned 64-bit integer System.Int64
ulong 0 a 18.446.744.073.709.551.6150 to 18,446,744,073,709,551,615 Inteiro de 64 bits sem sinalUnsigned 64-bit integer System.UInt64

Na tabela anterior, cada palavra-chave do tipo C# da coluna mais à esquerda é um alias do tipo .NET correspondente.In the preceding table, each C# type keyword from the leftmost column is an alias for the corresponding .NET type. Eles são intercambiáveis.They are interchangeable. Por exemplo, as declarações a seguir declaram variáveis do mesmo tipo:For example, the following declarations declare variables of the same type:

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

O valor padrão de cada tipo integral é zero, 0.The default value of each integral type is zero, 0. Cada um dos tipos integrais possui as constantes MinValue e MaxValue que fornecem o valor mínimo e máximo desse tipo.Each of the integral types has the MinValue and MaxValue constants that provide the minimum and maximum value of that type.

Use a estrutura System.Numerics.BigInteger para representar um inteiro com sinal sem nenhum limite superior ou inferior.Use the System.Numerics.BigInteger structure to represent a signed integer with no upper or lower bounds.

Literals inteirosInteger literals

Literais inteiros podem serInteger literals can be

  • decimal: sem qualquer prefixodecimal: without any prefix
  • hexadecimal: 0x com 0X o prefixo ou prefixohexadecimal: with the 0x or 0X prefix
  • binário: 0b com 0B o prefixo ou (disponível em C# 7.0 e posterior)binary: with the 0b or 0B prefix (available in C# 7.0 and later)

O código a seguir demonstra um exemplo de cada um:The following code demonstrates an example of each:

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

O exemplo anterior também _ mostra o uso de como separador de dígitos, que é suportado a partir de C# 7.0.The preceding example also shows the use of _ as a digit separator, which is supported starting with C# 7.0. Você pode usar o separador de dígitos com todos os tipos de literais numéricos.You can use the digit separator with all kinds of numeric literals.

O tipo de um inteiro literal é determinado pelo seu sufixo da seguinte forma:The type of an integer literal is determined by its suffix as follows:

  • Se o literal não tiver sufixo, seu tipo é o primeiro dos int uintseguintes tipos em que seu valor pode ser representado: , , long. ulongIf 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 o literal for U sufixo por ou u, seu tipo é o primeiro uint ulongdos seguintes tipos em que seu valor pode ser representado: , .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 o literal for L sufixo por ou l, seu tipo é o primeiro long ulongdos seguintes tipos em que seu valor pode ser representado: , .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.

    Observação

    Você pode usar a l letra minúscula como um sufixo.You can use the lowercase letter l as a suffix. No entanto, isso gera um l aviso compilador porque 1a letra pode ser confundida com o dígito .However, this generates a compiler warning because the letter l can be confused with the digit 1. Use L para clareza.Use L for clarity.

  • Se o literal for ULsufixo por Lu lU, Ul uL, ul, , LU, , , , ou lu, seu tipo é ulong.If the literal is suffixed by UL, Ul, uL, ul, LU, Lu, lU, or lu, its type is ulong.

Se o valor representado por um literal inteiro exceder UInt64.MaxValue, ocorrerá um erro de compilador CS1021.If the value represented by an integer literal exceeds UInt64.MaxValue, a compiler error CS1021 occurs.

Se o tipo determinado de um int inteiro literal é e o valor representado pelo literal está dentro do sbyteintervalo byte shortdo ushorttipo de destino, o valor pode ser implicitamente convertido para, , , , , uint, ou 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'

Como o exemplo anterior mostra, se o valor do literal não estiver dentro do intervalo do tipo de destino, ocorrerá um erro de compilador 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.

Você também pode usar um elenco para converter o valor representado por um inteiro literal para o tipo diferente do determinado tipo do literal:You can also 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;

ConversõesConversions

Você pode converter qualquer tipo numérico integral para qualquer outro tipo numérico integral.You can convert any integral numeric type to any other integral numeric type. Se o tipo de destino pode armazenar todos os valores do tipo de origem, a conversão está implícita.If the destination type can store all values of the source type, the conversion is implicit. Caso contrário, você precisa usar uma expressão de elenco para realizar uma conversão explícita.Otherwise, you need to use a cast expression to perform an explicit conversion. Para obter mais informações, consulte conversões numéricas incorporadas.For more information, see Built-in numeric conversions.

especificação da linguagem C#C# language specification

Para obter mais informações, confira as seguintes seções da especificação da linguagem C#:For more information, see the following sections of the C# language specification:

Confira tambémSee also