Tipos de datos de resultados de operador (Visual Basic)
Visual Basic determina el tipo de datos de resultado de una operación en función de los tipos de datos de los operandos. En algunos casos, podría tratarse de un tipo de datos con un intervalo mayor que el de cualquier operando.
Intervalos de tipo de datos
Los intervalos de los tipos de datos pertinentes, en orden de menor a mayor, son los siguientes:
Boolean: dos valores posibles.
Integer, UInteger: 4 294 967 296 (4,2…E+9) valores enteros posibles.
Long, ULong: 18 446 744 073 709 551 615 (1,8…E+19) valores enteros posibles.
Decimal: 1,5…E+29 valores enteros posibles; 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 más información sobre los tipos de datos de Visual Basic, consulte Tipos de datos.
Si un operando se evalúa como Nothing, los operadores aritméticos de Visual Basic lo tratan como cero.
Aritmética decimal
Tenga en cuenta que el tipo de datos Decimal no es un punto flotante ni entero.
Si cualquiera de los operandos de una operación +
, –
, *
, /
o Mod
es Decimal
y el otro no es Single
ni Double
, Visual Basic amplía el otro operando a Decimal
. Realiza la operación en Decimal
y el tipo de datos de resultado es Decimal
.
Aritmética de punto flotante
Visual Basic hace la mayor parte de la aritmética de punto flotante en Double, que es el tipo de datos más eficaz para este tipo de operaciones. Sin embargo, si un operando es Single y el otro no es Double
, Visual Basic realiza la operación en Single
. Amplía cada operando según sea necesario al tipo de datos adecuado antes de la operación y el resultado tiene ese tipo de datos.
Operadores / y ^
El operador /
solo se define para los tipos de datos Decimal, Single y Double. Visual Basic amplía cada operando según sea necesario al tipo de datos adecuado antes de la operación y el resultado tiene ese tipo de datos.
En la tabla siguiente, se muestran los tipos de datos de resultado para el operador /
. Tenga en cuenta que esta tabla es simétrica; para una combinación determinada de tipos de datos de operandos, el tipo de datos de resultado es el mismo independientemente del orden de los operandos.
Decimal |
Single |
Double |
Cualquier tipo entero | |
---|---|---|---|---|
Decimal |
Decimal | Single | Double | Decimal |
Single |
Single | Single | Double | Single |
Double |
Double | Double | Double | Double |
Cualquier tipo entero | Decimal | Single | Double | Double |
El operador ^
solo se define para el tipo de datos Double
. Visual Basic amplía cada operando según sea necesario a Double
antes de la operación y el tipo de datos del resultado siempre es Double
.
Aritmética de enteros
El tipo de datos de resultado de una operación de enteros depende de los tipos de datos de los operandos. En general, Visual Basic usa las directivas siguientes para determinar el tipo de datos de resultado:
Si ambos operandos de un operador binario tienen el mismo tipo de datos, el resultado tiene ese tipo de datos. Una excepción es
Boolean
, que se fuerza aShort
.Si un operando sin signo participa con un operando con signo, el resultado tiene un tipo con signo con al menos el mismo intervalo que cualquiera de los operandos.
De lo contrario, el resultado suele ser el mayor de los dos tipos de datos operandos.
Tenga en cuenta que es posible que el tipo de datos de resultado no sea el mismo que el tipo de datos del operando.
Nota
El tipo de datos de resultado no siempre es lo suficientemente grande como para contener todos los valores posibles resultantes de la operación. Se puede generar una excepción OverflowException si el valor es demasiado grande para el tipo de datos de resultado.
Operadores unarios + y –
En la tabla siguiente, se muestran los tipos de datos de resultado para los dos operadores unarios, +
y –
.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Unario + |
Short | SByte | Byte | Short | UShort | Entero | UInteger | long | ULong |
Unario – |
Short | SByte | Short | Short | Entero | Entero | long | long | Decimal |
Operadores << y >>
En la tabla siguiente, se muestran los tipos de datos de resultado para los dos operadores de desplazamiento de bits, <<
y >>
. Visual Basic trata cada operador de desplazamiento de bits como un operador unario en su operando izquierdo (el patrón de bits que se va a desplazar).
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
<< , >> |
Short | SByte | Byte | Short | UShort | Entero | UInteger | long | ULong |
Si el operando izquierdo es Decimal
, Single
, Double
o String
, Visual Basic intenta convertirlo en Long
antes de la operación y el tipo de datos de resultado es Long
. El operando derecho (el número de posiciones de bits que se van a desplazar) debe ser Integer
o un tipo que se amplíe a Integer
.
Operadores binarios +, –, * y Mod
En la tabla siguiente, se muestran los tipos de datos de resultado para los operadores binarios +
y –
y los operadores *
y Mod
. Tenga en cuenta que esta tabla es simétrica; para una combinación determinada de tipos de datos de operandos, el tipo de datos de resultado es el mismo independientemente del orden de los operandos.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Short | SByte | Short | Short | Entero | Entero | long | long | Decimal |
SByte |
SByte | SByte | Short | Short | Entero | Entero | long | long | Decimal |
Byte |
Short | Short | Byte | Short | UShort | Entero | UInteger | long | ULong |
Short |
Short | Short | Short | Short | Entero | Entero | long | long | Decimal |
UShort |
Entero | Entero | UShort | Entero | UShort | Entero | UInteger | long | ULong |
Integer |
Entero | Entero | Entero | Entero | Entero | Entero | 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)
En la tabla siguiente, se muestran los tipos de datos de resultado para el operador \
. Tenga en cuenta que esta tabla es simétrica; para una combinación determinada de tipos de datos de operandos, el tipo de datos de resultado es el mismo independientemente del orden de los operandos.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Short | SByte | Short | Short | Entero | Entero | long | long | long |
SByte |
SByte | SByte | Short | Short | Entero | Entero | long | long | long |
Byte |
Short | Short | Byte | Short | UShort | Entero | UInteger | long | ULong |
Short |
Short | Short | Short | Short | Entero | Entero | long | long | long |
UShort |
Entero | Entero | UShort | Entero | UShort | Entero | UInteger | long | ULong |
Integer |
Entero | Entero | Entero | Entero | Entero | Entero | 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 |
Si cualquiera de los operandos del operador \
es Decimal, Single o Double, Visual Basic intenta convertirlo en Long antes de la operación y el tipo de datos de resultado es Long
.
Comparación entre operaciones relacionales y bit a bit
El tipo de datos de resultado de una operación relacional (=
, <>
, <
, >
, <=
, >=
) siempre es el Boolean
tipo de datos Boolean. Lo mismo sucede con las operaciones lógicas (And
, AndAlso
, Not
, Or
, OrElse
, Xor
) en los operandos Boolean
.
El tipo de datos de resultado de una operación lógica bit a bit depende de los tipos de datos de los operandos. Tenga en cuenta que AndAlso
y OrElse
solo se definen para Boolean
y Visual Basic convierte cada operando en Boolean
, según sea necesario, antes de realizar la operación.
Operadores =, <>, <, >, <= y >=
Si ambos operandos son Boolean
, Visual Basic considera que True
es menor que False
. Si se compara un tipo numérico con una String
, Visual Basic intenta convertir la String
en Double
antes de la operación. Un operando Char
o Date
solo se puede comparar con otro operando del mismo tipo de datos. El tipo de datos de resultado siempre es Boolean
.
Operador Not bit a bit
En la tabla siguiente, se muestran los tipos de datos de resultado para el operador Not
bit a bit.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Not |
Boolean | SByte | Byte | Short | UShort | Entero | UInteger | long | ULong |
Si el operando es Decimal
, Single
, Double
o String
, Visual Basic intenta convertirlo en Long
antes de la operación y el tipo de datos de resultado es Long
.
Operadores And, Or y Xor bit a bit
En la tabla siguiente, se muestran los tipos de datos de resultado para los operadores And
, Or
y Xor
bit a bit. Tenga en cuenta que esta tabla es simétrica; para una combinación determinada de tipos de datos de operandos, el tipo de datos de resultado es el mismo independientemente del orden de los operandos.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Boolean | SByte | Short | Short | Entero | Entero | long | long | long |
SByte |
SByte | SByte | Short | Short | Entero | Entero | long | long | long |
Byte |
Short | Short | Byte | Short | UShort | Entero | UInteger | long | ULong |
Short |
Short | Short | Short | Short | Entero | Entero | long | long | long |
UShort |
Entero | Entero | UShort | Entero | UShort | Entero | UInteger | long | ULong |
Integer |
Entero | Entero | Entero | Entero | Entero | Entero | 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 |
Si un operando es Decimal
, Single
, Double
o String
, Visual Basic intenta convertirlo en Long
antes de la operación y el tipo de datos de resultado es el mismo que si ese operando ya hubiese sido Long
.
Operadores varios
El operador &
solo se define para la concatenación de los operandos String
. Visual Basic convierte cada operando según sea necesario en String
antes de la operación y el tipo de datos del resultado siempre es String
. Para los fines del operador &
, todas las conversiones en String
se consideran de ampliación, incluso si Option Strict
es On
.
Los operadores Is
y IsNot
requieren que ambos operandos sean de un tipo de referencia. La expresión TypeOf
…Is
requiere que el primer operando sea de un tipo de referencia y que el segundo sea el nombre de un tipo de datos. En todos esos casos, el tipo de datos de resultado es Boolean
.
El operador Like
solo se define para la coincidencia de patrones de los operandos String
. Visual Basic intenta convertir cada operando en String
, según sea necesario, antes de la operación. El tipo de datos de resultado siempre es Boolean
.