short (Referência de C#)short (C# Reference)

short indica um tipo de dados integrais que armazena valores de acordo com o tamanho e o intervalo mostrados na tabela a seguir.short denotes an integral data type that stores values according to the size and range shown in the following table.

TipoType IntervaloRange TamanhoSize Tipo .NET.NET type
short -32.768 a 32.767-32,768 to 32,767 Inteiro de 16 bits com sinalSigned 16-bit integer System.Int16

LiteraisLiterals

Você pode declarar e inicializar uma variável short atribuindo a ela um literal decimal, um literal hexadecimal ou (começando com o C# 7.0) um literal binário.You can declare and initialize a short variable by assigning a decimal literal, a hexadecimal literal, or (starting with C# 7.0) a binary literal to it. Se o literal inteiro estiver fora do intervalo de short (ou seja, se for menor que Int16.MinValue ou maior que Int16.MaxValue), ocorrerá um erro de compilação.If the integer literal is outside the range of short (that is, if it is less than Int16.MinValue or greater than Int16.MaxValue), a compilation error occurs.

No exemplo a seguir, inteiros iguais a 1.034 representados como literais decimais, hexadecimais e binários são implicitamente convertidos de valores int para short.In the following example, integers equal to 1,034 that are represented as decimal, hexadecimal, and binary literals are implicitly converted from int to short values.

short shortValue1 = 1034;
Console.WriteLine(shortValue1);

short shortValue2 = 0x040A;
Console.WriteLine(shortValue2);

short shortValue3 = 0b0100_00001010;
Console.WriteLine(shortValue3);
// The example displays the following output:
//          1034
//          1034
//          1034

Observação

Use o prefixo 0x ou 0X para indicar um literal hexadecimal e o prefixo 0b ou 0B para indicar um literal binário.You use the prefix 0x or 0X to denote a hexadecimal literal and the prefix 0b or 0B to denote a binary literal. Literais decimais não têm nenhum prefixo.Decimal literals have no prefix.

Começando com o C# 7.0, alguns recursos foram adicionados para melhorar a legibilidade.Starting with C# 7.0, a couple of features have been added to enhance readability.

  • O C# 7.0 permite o uso do caractere de sublinhado, _, como um separador de dígito.C# 7.0 allows the usage of the underscore character, _, as a digit separator.
  • O C# 7.2 permite que _ seja usado como separador de dígito de um literal binário ou hexadecimal, após o prefixo.C# 7.2 allows _ to be used as a digit separator for a binary or hexadecimal literal, after the prefix. Um literal decimal não pode ter um sublinhado à esquerda.A decimal literal isn't permitted to have a leading underscore.

Alguns exemplos são mostrados abaixo.Some examples are shown below.

short shortValue1 = 1_034;
Console.WriteLine(shortValue1);

short shortValue2 = 0b00000100_00001010;
Console.WriteLine(shortValue2);

short shortValue3 = 0b_00000100_00001010;       // C# 7.2 onwards
Console.WriteLine(shortValue3);
// The example displays the following output:
//          1034
//          1034
//          1034

Resolução de sobrecarga do compiladorCompiler overload resolution

Uma conversão deve ser usada ao chamar métodos sobrecarregados.A cast must be used when calling overloaded methods. Considere, por exemplo, os seguintes métodos sobrecarregados que usam os parâmetros short e int:Consider, for example, the following overloaded methods that use short and int parameters:

public static void SampleMethod(int i) {}
public static void SampleMethod(short s) {}

O uso da conversão short garante que o tipo correto será chamado, por exemplo:Using the short cast guarantees that the correct type is called, for example:

SampleMethod(5);         // Calling the method with the int parameter
SampleMethod((short)5);  // Calling the method with the short parameter

ConversõesConversions

Há uma conversão implícita predefinida de short em int, longo, float, duplo ou decimal.There is a predefined implicit conversion from short to int, long, float, double, or decimal.

Não é possível converter implicitamente tipos numéricos não literais com tamanho de armazenamento maior em short (consulte a Tabela de tipos integrais para ver os tamanhos de armazenamento de tipos integrais).You cannot implicitly convert nonliteral numeric types of larger storage size to short (see Integral Types Table for the storage sizes of integral types). Considere, por exemplo, as duas variáveis short x e y a seguir:Consider, for example, the following two short variables x and y:

short x = 5, y = 12;

A instrução de atribuição a seguir produz um erro de compilação, porque a expressão aritmética no lado direito do operador de atribuição é avaliada como int por padrão.The following assignment statement produces a compilation error because the arithmetic expression on the right-hand side of the assignment operator evaluates to int by default.

short z  = x + y;        // Compiler error CS0266: no conversion from int to short

Para corrigir esse problema, use uma conversão:To fix this problem, use a cast:

short z  = (short)(x + y);   // Explicit conversion

Também é possível usar as instruções a seguir, em que a variável de destino tem o mesmo tamanho de armazenamento ou um tamanho de armazenamento maior:It is also possible to use the following statements, where the destination variable has the same storage size or a larger storage size:

int m = x + y;
long n = x + y;

Não há nenhuma conversão implícita de tipos de ponto flutuante para short.There is no implicit conversion from floating-point types to short. Por exemplo, a instrução a seguir gerará um erro de compilador, a menos que uma conversão explícita seja usada:For example, the following statement generates a compiler error unless an explicit cast is used:

short x = 3.0;          // Error: no implicit conversion from double
short y = (short)3.0;   // OK: explicit conversion

Para obter informações sobre expressões aritméticas com tipos de ponto flutuante mistos e tipos integrais, consulte float e double.For information on arithmetic expressions with mixed floating-point types and integral types, see float and double.

Para obter mais informações sobre as regras de conversão numérica implícita, consulte a Tabela de conversões numéricas implícitas.For more information on implicit numeric conversion rules, see the Implicit Numeric Conversions Table.

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

Para obter mais informações, veja Tipos integrais na Especificação da Linguagem C#.For more information, see Integral types in the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Consulte tambémSee also