Tipos de dados de resultados do operador (Visual Basic)
O Visual Basic determina o tipo de dados de resultado de uma operação com base nos tipos de dados dos operandos. Em alguns casos, esse pode ser um tipo de dados com um intervalo maior do que o de qualquer operando.
Intervalos de tipos de dados
Os intervalos dos tipos de dados relevantes, em ordem de menor a maior, são os seguintes:
Boolean – dois valores possíveis
Short, UShort – 65.536 (6.5...E+4) valores integrais possíveis
Integer, UInteger – 4.294.967.296 (4.2...E+9) valores integrais possíveis
Long, ULong – 18.446.744.073.709.551.615 (1.8...E+19) valores integrais possíveis
Decimal – 1,5...E+29 valores integrais possíveis, intervalo máximo 7.9...E+28 (valor absoluto)
Single – intervalo máximo 3,4...E+38 (valor absoluto)
Double – intervalo máximo 1,7...E+308 (valor absoluto)
Para obter mais informações sobre tipos de dados do Visual Basic, confira Tipos de dados.
Se um operando for avaliado como Nothing, os operadores aritméticos do Visual Basic o tratarão como zero.
Aritmética decimal
Observe que o tipo de dados Decimal não é ponto flutuante nem inteiro.
Se o operando de uma operação +
, –
, *
, /
ou Mod
for Decimal
e o outro não for Single
nem Double
, o Visual Basic ampliará o outro operando para Decimal
. Ele executa a operação em Decimal
, e o tipo de dados de resultado é Decimal
.
Aritmético de ponto flutuante
O Visual Basic executa a aritmética de ponto flutuante no tipo Double, que é o tipo de dados mais eficiente para essas operações. No entanto, se um operando for Single e o outro não for Double
, o Visual Basic executará a operação em Single
. Ele amplia cada operando conforme necessário para o tipo de dados apropriado antes da operação, e o resultado tem esse tipo de dados.
Operadores / e ^
O operador /
é definido apenas para os tipos de dados Decimal, Single e Double. O Visual Basic amplia cada operando conforme necessário para o tipo de dados apropriado antes da operação, e o resultado tem esse tipo de dados.
A tabela a seguir mostra os tipos de dados de resultado do operador /
. Observe que esta tabela é simétrica; para uma determinada combinação de tipos de dados de operando, o tipo de dados de resultado é o mesmo, independentemente da ordem dos operandos.
Decimal |
Single |
Double |
Qualquer tipo inteiro | |
---|---|---|---|---|
Decimal |
Decimal | Single | Double | Decimal |
Single |
Single | Single | Double | Single |
Double |
Double | Double | Double | Double |
Qualquer tipo inteiro | Decimal | Single | Double | Double |
O operador ^
é definido apenas para o tipo de dados Double
. O Visual Basic amplia cada operando conforme necessário para Double
antes da operação, e o tipo de dados de resultado é sempre Double
.
Aritmética do inteiro
O tipo de dados de resultado de uma operação de inteiro depende dos tipos de dados dos operandos. Em geral, o Visual Basic usa as seguintes políticas para determinar o tipo de dados de resultado:
Se ambos os operandos de um operador binário tiverem o mesmo tipo de dados, o resultado terá esse tipo de dados. Uma exceção é
Boolean
, que é forçado aShort
.Se um operando não assinado participar com um operando assinado, o resultado terá um tipo assinado com pelo menos um intervalo tão grande quanto qualquer operando.
Caso contrário, o resultado geralmente tem o maior dos dois tipos de dados de operando.
Observe que o tipo de dados de resultado pode não ser o mesmo que qualquer tipo de dados operando.
Observação
O tipo de dados de resultado nem sempre é grande o suficiente para conter todos os valores possíveis resultantes da operação. Uma exceção OverflowException poderá ocorrer se o valor for muito grande para o tipo de dados de resultado.
Operadores unários + e –
A tabela a seguir mostra os tipos de dados de resultado dos dois operadores unários, +
e –
.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Unário + |
Short | SByte | Byte | Short | UShort | Integer | UInteger | long | ULong |
Unário – |
Short | SByte | Short | Short | Integer | Integer | long | long | Decimal |
Operadores << e >>
A tabela a seguir mostra os tipos de dados de resultado dos dois operadores de deslocamento de bit, <<
e >>
. O Visual Basic trata cada operador de deslocamento de bit como um operador unário no operando esquerdo (o padrão de bit a ser deslocado).
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
<< , >> |
Short | SByte | Byte | Short | UShort | Integer | UInteger | long | ULong |
Se o operando esquerdo for Decimal
, Single
ou Double
, o String
Visual Basic tentará convertê-lo em Long
antes da operação, e o tipo de dados de resultado será Long
. O operando à direita (o número de posições de bit a serem deslocadas) deve ser Integer
ou um tipo que se expanda para Integer
.
Operadores binários +, –, * e Mod
A tabela a seguir mostra os tipos de dados de resultado dos operadores binários +
e –
, e dos operadores *
e Mod
. Observe que esta tabela é simétrica; para uma determinada combinação de tipos de dados de operando, o tipo de dados de resultado é o mesmo, independentemente da ordem dos operandos.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Short | SByte | Short | Short | Integer | Integer | long | long | Decimal |
SByte |
SByte | SByte | Short | Short | Integer | Integer | long | long | Decimal |
Byte |
Short | Short | Byte | Short | UShort | Integer | UInteger | long | ULong |
Short |
Short | Short | Short | Short | Integer | Integer | long | long | Decimal |
UShort |
Integer | Integer | UShort | Integer | UShort | Integer | UInteger | long | ULong |
Integer |
Integer | Integer | Integer | Integer | Integer | Integer | long | long | Decimal |
UInteger |
long | long | UInteger | long | UInteger | long | UInteger | long | ULong |
Long |
long | long | long | long | long | long | long | long | Decimal |
ULong |
Decimal | Decimal | ULong | Decimal | ULong | Decimal | ULong | Decimal | ULong |
Operador \
A tabela a seguir mostra os tipos de dados de resultado do operador \
. Observe que esta tabela é simétrica; para uma determinada combinação de tipos de dados de operando, o tipo de dados de resultado é o mesmo, independentemente da ordem dos operandos.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Short | SByte | Short | Short | Integer | Integer | long | long | long |
SByte |
SByte | SByte | Short | Short | Integer | Integer | long | long | long |
Byte |
Short | Short | Byte | Short | UShort | Integer | UInteger | long | ULong |
Short |
Short | Short | Short | Short | Integer | Integer | long | long | long |
UShort |
Integer | Integer | UShort | Integer | UShort | Integer | UInteger | long | ULong |
Integer |
Integer | Integer | Integer | Integer | Integer | Integer | long | long | long |
UInteger |
long | long | UInteger | long | UInteger | long | UInteger | long | ULong |
Long |
long | long | long | long | long | long | long | long | long |
ULong |
long | long | ULong | long | ULong | long | ULong | long | ULong |
Se o operando do operador \
for Decimal, Single ou Double, o Visual Basic tentará convertê-lo em Long antes da operação, e o tipo de dados de resultado será Long
.
Comparações relacionais e bit a bit
O tipo de dados de resultado de uma operação relacional (=
, <>
, <
, >
, <=
, >=
) é sempre Boolean
Tipo de dados booliano. O mesmo vale para operações lógicas (And
, AndAlso
, Not
, Or
, OrElse
, Xor
) em operandos Boolean
.
O tipo de dados de resultado de uma operação lógica bi a bit depende dos tipos de dados dos operandos. Observe que AndAlso
e OrElse
são definidos apenas para Boolean
, e o Visual Basic converte cada operando conforme necessário em Boolean
antes de executar a operação.
Operadores =, <>, <, >, <= e >=
Se ambos os operandos forem Boolean
, o Visual Basic considerará True
menor que False
. Se um tipo numérico for comparado com um String
, o Visual Basic tentará converter o String
em Double
antes da operação. Um operando Char
ou Date
só pode ser comparado com outro operando do mesmo tipo de dados. O tipo de dados de resultado é sempre Boolean
.
Operador Not bit a bit
A tabela a seguir mostra os tipos de dados de resultado do operador Not
bit a bit.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Not |
Booliano | SByte | Byte | Short | UShort | Integer | UInteger | long | ULong |
Se o operando for Decimal
, Single
ou Double
, o String
Visual Basic tentará convertê-lo em Long
antes da operação, e o tipo de dados de resultado será Long
.
Operadores And, Or e Xor bit a bit
A tabela a seguir mostra os tipos de dados de resultado dos operadores And
, Or
e Xor
bit a bit. Observe que esta tabela é simétrica; para uma determinada combinação de tipos de dados de operando, o tipo de dados de resultado é o mesmo, independentemente da ordem dos operandos.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Booliano | SByte | Short | Short | Integer | Integer | long | long | long |
SByte |
SByte | SByte | Short | Short | Integer | Integer | long | long | long |
Byte |
Short | Short | Byte | Short | UShort | Integer | UInteger | long | ULong |
Short |
Short | Short | Short | Short | Integer | Integer | long | long | long |
UShort |
Integer | Integer | UShort | Integer | UShort | Integer | UInteger | long | ULong |
Integer |
Integer | Integer | Integer | Integer | Integer | Integer | long | long | long |
UInteger |
long | long | UInteger | long | UInteger | long | UInteger | long | ULong |
Long |
long | long | long | long | long | long | long | long | long |
ULong |
long | long | ULong | long | ULong | long | ULong | long | ULong |
Se um operando for Decimal
, Single
, Double
ou String
, o Visual Basic tentará convertê-lo em Long
antes da operação, e o tipo de dados de resultado será o mesmo que se esse operando já tivesse sido Long
.
Operadores diversos
O operador &
é definido apenas para concatenação de operandos String
. O Visual Basic converte cada operando conforme necessário em String
antes da operação, e o tipo de dados de resultado é sempre String
. Para as finalidades do operador &
, todas as conversões em String
são consideradas ampliadas, mesmo que Option Strict
seja On
.
Os operadores Is
e IsNot
exigem que ambos os operandos sejam de um tipo de referência. A expressão TypeOf
...Is
requer que o primeiro operando seja de um tipo de referência e o segundo operando seja o nome de um tipo de dados. Em todos esses casos, o tipo de dados de resultado é Boolean
.
O operador Like
é definido apenas para padrões correspondentes de operandos String
. O Visual Basic tenta converter cada operando conforme necessário em String
antes da operação. O tipo de dados de resultado é sempre Boolean
.