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

  • SByte, Byte: 256 possibili valori integrali

  • 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 Decimale 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 su Short.

  • 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 Booleantipo 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.

Vedi anche