Tipi di dati dei risultati degli operatori (Visual Basic)
Visual Basic determina il tipo di dati dei risultati di un'operazione in base ai tipi di dati degli operandi. In alcuni casi può trattarsi di un tipo di dati con un intervallo maggiore rispetto a quello di uno degli operandi.
Intervalli dei tipi di dati
Gli intervalli dei tipi di dati pertinenti, in ordine dal più piccolo al più grande, sono i seguenti:
Boolean: i valori possibili sono due
Short, UShort: 65.536 (6.5...E+4) possibili valori integrali
Integer, UInteger: 4.294.967.296 (4,2...E+9) possibili valori integrali
Long, ULong: 18.446.744.073.709.551.615 (1,8...E+19) possibili valori integrali
Decimal: 1,5...E+29 possibili valori integrali, intervallo massimo 7,9...E+28 (valore assoluto)
Single: intervallo massimo 3,4...E+38 (valore assoluto)
Double: intervallo massimo 1,7...E+308 (valore assoluto)
Per altre informazioni sui tipi di dati di Visual Basic, vedere Tipi di dati.
Se un operando restituisce Nothing, gli operatori aritmetici di Visual Basic lo considerano pari a zero.
Aritmetica Decimal
Si noti che il tipo di dati Decimal non è né a virgola mobile né Integer.
Se uno degli operandi di un'operazione +
, –
, *
, /
o Mod
è Decimal
e l'altro non è Single
o Double
, Visual Basic estende l'altro operando a Decimal
. Esegue l'operazione in Decimal
e il tipo di dati dei risultati è Decimal
.
Aritmetica a virgola mobile
Visual Basic esegue la maggior parte dell'aritmetica a virgola mobile in Double, che è il tipo di dati più efficiente per tali operazioni. Tuttavia, se un operando è Single e l'altro non è Double
, Visual Basic esegue l'operazione in Single
. Estende ogni operando in base alle esigenze al tipo di dati appropriato prima dell'operazione e il risultato ha tale tipo di dati.
Operatori / e ^
L'operatore /
è definito solo per i tipi di dati Decimal, Single e Double. Visual Basic estende ogni operando in base alle esigenze al tipo di dati appropriato prima dell'operazione e il risultato ha tale tipo di dati.
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per l'operatore /
. Si noti che questa tabella è simmetrica; per una determinata combinazione di tipi di dati dell'operando, il tipo di dati dei risultati è lo stesso indipendentemente dall'ordine degli operandi.
Decimal |
Single |
Double |
Qualsiasi tipo Integer | |
---|---|---|---|---|
Decimal |
Decimale | Singola | Double | Decimale |
Single |
Celibe/nubile | Celibe/nubile | Double | Singola |
Double |
Double | Double | Double | Double |
Qualsiasi tipo Integer | Decimale | Singola | Double | Double |
L'operatore ^
è definito solo per il tipo di dati Double
. Visual Basic estende ogni operando in base alle esigenze a Double
prima dell'operazione e il tipo di dati del risultato è sempre Double
.
Aritmetica Integer
Il tipo di dati risultante di un'operazione Integer dipende dai tipi di dati degli operandi. In generale, Visual Basic usa i criteri seguenti per determinare il tipo di dati dei risultati:
Se entrambi gli operandi di un operatore binario hanno lo stesso tipo di dati, il risultato ha tale tipo di dati. Un'eccezione è
Boolean
, che viene impostato forzatamente suShort
.Se un operando senza segno partecipa con un operando con segno, il risultato ha un tipo con segno con almeno un intervallo di grandi dimensioni pari a quello di uno degli operandi.
In caso contrario, il risultato ha in genere il tipo di dati più grande dei due operandi.
Si noti che il tipo di dati del risultato potrebbe non essere uguale a uno dei due tipi di dati dell'operando.
Nota
Il tipo di dati dei risultati non è sempre sufficientemente grande da contenere tutti i valori possibili risultanti dall'operazione. Un'eccezione OverflowException può verificarsi se il valore è troppo grande per il tipo di dati del risultato.
Operatori unari + e -
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per i due operatori unari +
e –
.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
+ unario |
Short | SByte | Byte | Short | UShort | Intero | UInteger | Lungo | ULong |
– unario |
Short | SByte | Short | Short | Intero | Intero | Lungo | Lungo | Decimale |
Operatori << e >>
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per i due operatori di spostamento di bit <<
e >>
. Visual Basic considera ogni operatore di spostamento di bit come operatore unario sul relativo operando sinistro (schema di bit da spostare).
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
<< , >> |
Short | SByte | Byte | Short | UShort | Intero | UInteger | Lungo | ULong |
Se l'operando sinistro è Decimal
, Single
, Double
o String
, Visual Basic tenta di convertirlo in Long
prima dell'operazione e il tipo di dati del risultato è Long
. L'operando destro (il numero di posizioni di bit da spostare) deve essere Integer
o un tipo che si estende a Integer
.
Operatori binari +, –, * e Mod
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per gli operatori binari +
e –
e gli operatori *
e Mod
. Si noti che questa tabella è simmetrica; per una determinata combinazione di tipi di dati dell'operando, il tipo di dati dei risultati è lo stesso indipendentemente dall'ordine degli operandi.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Short | SByte | Short | Short | Intero | Intero | Lungo | Lungo | Decimale |
SByte |
SByte | SByte | Short | Short | Intero | Intero | Lungo | Lungo | Decimale |
Byte |
Short | Short | Byte | Short | UShort | Intero | UInteger | Lungo | ULong |
Short |
Short | Short | Short | Short | Intero | Intero | Lungo | Lungo | Decimale |
UShort |
Intero | Intero | UShort | Intero | UShort | Intero | UInteger | Lungo | ULong |
Integer |
Intero | Intero | Intero | Intero | Intero | Intero | Lungo | Lungo | Decimale |
UInteger |
Lungo | Lungo | UInteger | Lungo | UInteger | Lungo | UInteger | Lungo | ULong |
Long |
Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Decimale |
ULong |
Decimale | Decimale | ULong | Decimale | ULong | Decimale | ULong | Decimale | ULong |
Operatore \
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per l'operatore \
. Si noti che questa tabella è simmetrica; per una determinata combinazione di tipi di dati dell'operando, il tipo di dati dei risultati è lo stesso indipendentemente dall'ordine degli operandi.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Short | SByte | Short | Short | Intero | Intero | Lungo | Lungo | Lungo |
SByte |
SByte | SByte | Short | Short | Intero | Intero | Lungo | Lungo | Lungo |
Byte |
Short | Short | Byte | Short | UShort | Intero | UInteger | Lungo | ULong |
Short |
Short | Short | Short | Short | Intero | Intero | Lungo | Lungo | Lungo |
UShort |
Intero | Intero | UShort | Intero | UShort | Intero | UInteger | Lungo | ULong |
Integer |
Intero | Intero | Intero | Intero | Intero | Intero | Lungo | Lungo | Lungo |
UInteger |
Lungo | Lungo | UInteger | Lungo | UInteger | Lungo | UInteger | Lungo | ULong |
Long |
Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Lungo |
ULong |
Lungo | Lungo | ULong | Lungo | ULong | Lungo | ULong | Lungo | ULong |
Se uno degli operandi dell'operatore \
è Decimal, Single o Double, Visual Basic tenta di convertirlo in Long prima dell'operazione e il tipo di dati del risultato è Long
.
Confronti relazionali e bit per bit
Il tipo di dati risultante di un'operazione relazionale (=
, <>
, <
, >
, <=
, >=
) è sempre un Boolean
tipo di dati booleano. Lo stesso vale per le operazioni logiche (And
, AndAlso
, Not
, Or
, OrElse
, Xor
) sugli operandi Boolean
.
Il tipo di dati risultante di un'operazione logica bit per bit dipende dai tipi di dati degli operandi. Si noti che AndAlso
e OrElse
sono definiti solo per Boolean
e Visual Basic converte ogni operando in base alle esigenze in Boolean
prima di eseguire l'operazione.
Operatori =, <>, <, >, <= e >=
Se entrambi gli operandi sono Boolean
, Visual Basic considera True
minore di False
. Se un tipo numerico viene confrontato con String
, Visual Basic tenta di convertire String
in Double
prima dell'operazione. Un operando Char
o Date
può essere confrontato solo con un altro operando dello stesso tipo di dati. Il tipo di dati risultante è sempre Boolean
.
Operatore NOT bit per bit
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per l'operatore Not
bit per bit.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Not |
Booleano | SByte | Byte | Short | UShort | Intero | UInteger | Lungo | ULong |
Se l'operando è Decimal
, Single
, Double
o String
, Visual Basic tenta di convertirlo in Long
prima dell'operazione e il tipo di dati del risultato è Long
.
Operatori And, Or e Xor bit per bit
Nella tabella seguente vengono illustrati i tipi di dati dei risultati per gli operatori And
, Or
e Xor
. Si noti che questa tabella è simmetrica; per una determinata combinazione di tipi di dati dell'operando, il tipo di dati dei risultati è lo stesso indipendentemente dall'ordine degli operandi.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Booleano | SByte | Short | Short | Intero | Intero | Lungo | Lungo | Lungo |
SByte |
SByte | SByte | Short | Short | Intero | Intero | Lungo | Lungo | Lungo |
Byte |
Short | Short | Byte | Short | UShort | Intero | UInteger | Lungo | ULong |
Short |
Short | Short | Short | Short | Intero | Intero | Lungo | Lungo | Lungo |
UShort |
Intero | Intero | UShort | Intero | UShort | Intero | UInteger | Lungo | ULong |
Integer |
Intero | Intero | Intero | Intero | Intero | Intero | Lungo | Lungo | Lungo |
UInteger |
Lungo | Lungo | UInteger | Lungo | UInteger | Lungo | UInteger | Lungo | ULong |
Long |
Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Lungo | Lungo |
ULong |
Lungo | Lungo | ULong | Lungo | ULong | Lungo | ULong | Lungo | ULong |
Se un operando è Decimal
, Single
, Double
o String
, Visual Basic tenta di convertirlo in Long
prima dell'operazione e il tipo di dati del risultato è uguale a quello ottenuto se l'operando fosse già stato Long
.
Operatori vari
L'operatore &
è definito solo per la concatenazione di operandi String
. Visual Basic converte ogni operando in base alle esigenze in String
prima dell'operazione e il tipo di dati del risultato è sempre String
. Ai fini dell'operatore &
, si ritiene che tutte le conversioni in String
possano supportare un numero maggiore di dati, anche se Option Strict
è On
.
Gli operatori Is
e IsNot
richiedono che entrambi gli operandi siano di un tipo riferimento. L'espressione TypeOf
...Is
richiede che il primo operando sia di un tipo riferimento e il secondo operando sia il nome di un tipo di dati. In tutti questi casi il tipo di dati del risultato è Boolean
.
L'operatore Like
è definito solo per i criteri di ricerca degli operandi String
. Visual Basic tenta di convertire ogni operando in base alle esigenze in String
prima dell'operazione. Il tipo di dati risultante è sempre Boolean
.