Le variabili in Visual Basic Net? Le trovi su Opentraining.it
Corso di Visual Basic:
Tredicesima lezione - Estensione della logica binaria (a cura di Giorgio Abraini)

Nella lezione 8 abbiamo visto cosa sono i bit, i byte e come funziona la logica binaria che sta alla base dei moderni computer: seguendo questa logica abbiamo capito che un byte può contenere un valore compreso tra 0 e 255, due byte possono contenere un valore compreso tra 0 e 65535, e così via.
Tuttavia, questo è vero solo se si usa una logica strettamente binaria: nulla però impedisce di considerare una sequenza di bit in un modo leggermente diverso, secondo la nostra convenienza; potremmo cioè suddividere una sequenza di bit in uno o più gruppi aventi significati diversi.
In altre parole, i bit possono essere organizzati in modo tale che possano assumere un valore diverso da quello che avrebbero secondo il sistema binario puro e semplice: questo è proprio ciò che si fa per permettere al calcolatore di considerare i numeri negativi.
Una variabile di tipo Integer, ad esempio, consta di 16 bit (2 byte) e secondo il sistema binario dovrebbe poter assumere valori da 0 fino a 65535, mentre in realtà sappiamo che il suo intervallo di valori va da -32768 a +32767, ovvero da -2^15 a +2^15 - 1.
E' chiaro quindi che il valore assoluto del numero memorizzato in una variabile Integer è rappresentabile soltanto con 15 bit, e non con 16: che fine ha fatto il sedicesimo bit?
E' facile intuire che il sedicesimo bit è utilizzato per rappresentare il segno del numero; in fin dei conti non cambia nulla: l'intervallo -32768/+32767 ha lo stesso numero di elementi dell'intervallo 0/65535 (in entrambi i casi infatti il numero di valori possibili è 65536 = 2^16), però grazie al "trucco" di utilizzare un bit come un bit di segno abbiamo la possibilità di usare anche i numeri negativi.
Per la precisione, il bit di segno è il bit più significativo, ovvero quello più a sinistra (ricordate sempre che i bit si contano a cominciare da destra), e gli altri quindici sono usati per indicare il numero vero e proprio; quindi il modo in cui gli Integer vengono memorizzati nella memoria del computer è schematizzabile in questo modo:

primo byte secondo byte
x xxxxxxx xxxxxxxx
dove la prima x a sinistra rappresenta il sedicesimo bit, ovvero il bit di segno: se questo vale 0, il valore della variabile sarà positivo, se vale 1 il valore sarà negativo; ad esempio, il numero 1453 è rappresentabile in questo modo:

00000101 10101101

Contrariamente a quanto si potrebbe pensare, però, il numero -1453 NON è rappresentato così:

10000101 10101101

bensì è rappresentato così:

11111010 01010011

Il motivo di questo strano fenomeno è che per il computer il numero -1453 non è banalmente il numero 1453 con "un meno davanti", ma è quel numero che, sommato a 1453, restituisce 0: infatti se provate a fare la somma (nel sistema binario, quindi scrivendo 0 "col riporto di 1" quando la somma di due bit è uguale a 2)

0000010110101101+ (+1453)
1111101001010011= (-1453)
-----------------
10000000000000000

troverete che il risultato della somma è un 1 seguito da 16 zeri; poiché noi stiamo considerando gli Integer, i bit che ci interessano sono solo gli ultimi 16, e quindi dell'1 iniziale possiamo fregarcene tranquillamente: quello che resta è 0, che è proprio il risultato della somma algebrica 1453 + (-1453).
Tutto ciò sembra molto macchinoso, ma c'è un modo molto semplice per trovare la rappresentazione binaria di un numero negativo, conoscendo quella del corrispondente numero positivo: la rappresentazione binaria di -x è uguale a (not x) +1: prendete la rappresentazione binaria di 1453, cambiate ogni bit (cioè applicate l'operatore not ad ogni singolo bit) e infine aggiungete 1 al risultato ("aggiungere" nel senso di fare la somma, non nel senso di scriverlo in fondo come se fosse il diciassettesimo bit!): troverete esattamente la rappresentazione binaria di -1453. Lo stesso discorso naturalmente può essere applicato anche agli altri tipi numerici (Long, Single, Double, ecc.): infatti in Visual Basic tutti i tipi di dati numerici, ad eccezione del tipo byte, sono "con segno", cioè utilizzano il bit più significativo come bit di segno. Una particolare organizzazione dei bit consente anche di rappresentare i numeri frazionari, oppure di rappresentare i numeri secondo la notazione scientifica (con una mantissa e un esponente) come avviene nei Single e nei Double.

Svelato l'arcano mistero dei numeri negativi, passiamo ai vettori di variabili: spesso si ha necessità di utilizzare più di una variabile dello stesso tipo per effettuare una stessa operazione; ad esempio, per calcolare la media di 10 valori ho bisogno di sommare questi 10 valori e dividere la somma per 10: a tale scopo potrei utilizzare 10 variabili diverse, che naturalmente vanno dichiarate una per una, più o meno in questo modo:

Dim Var1 As Integer
Dim Var2 As Integer
...
Dim Var10 As Integer
Var1 = 1
Var2 = 44
Var = 13
...
Var10 = 32
Media = (Var1 + Var2 + Var3+ ... + Var10) / 10

E se a un certo punto dovessi aver bisogno di fare la media non più di 10 valori, ma di 20 valori, dovrei dichiarare altre 10 variabili, impostare il valore opportuno per ciascuna di esse, sommarle alle 10 dichiarate in precedenza, e infine dividere la somma per 20! E' chiaro che questo modo di procedere è a dir poco laborioso: in questi casi è estremamente conveniente utilizzare i vettori, ovvero un insieme di variabili dello stesso tipo e con lo stesso nome, distinguibili le une dalle altre solo tramite un indice.
La dichiarazione di un vettore di variabili si fa scrivendo tra parentesi il numero di elementi che deve avere il vettore: per esempio nel nostro caso potremmo scrivere:

Dim Var(10) As Integer

Avremo così a disposizione 10 variabili (anzi, in realtà 11 come spiegherò tra poco) di tipo Integer di nome Var: la prima variabile che ci interessa sarà Var(1), la seconda Var(2), ecc. fino alla decima, Var(10).
Nella dichiarazione, il numero indicato tra parentesi indica il limite superiore del vettore, ovvero il valore massimo che può assumere l'indice: se provassimo a scrivere, ad esempio:

var(11) = 1000

otterremmo un errore, perché il limite massimo dell'indice è 10.
Il limite superiore deve essere compreso nell'intervallo di valori valido per il tipo Long (-2147483648/+2147483647): da ciò segue che è possibile specificare come limite superiore anche un valore negativo, ma bisogna tenere presente un paio di cose.
Prima di tutto, così come c'è un limite superiore, c'è anche un limite inferiore per l'indice: se non è specificato nella dichiarazione, questo limite inferiore è per default 0; pertanto scrivendo:

Dim Var(10) As Integer

l'indice di questo vettore potrà andare da 0 a 10, e quindi il vettore avrà 11 elementi; se si desidera che l'indice parta sempre da 1 anziché da 0, è possibile utilizzare l'istruzione:

Option Base 1

Questa istruzione, come l'analoga Option Explicit va inserita nella sezione generale del form.
Però è anche possibile indicare entrambi i limiti, quello inferiore e quello superiore, nella dichiarazione stessa, usando la parola chiave To:

Dim Var(1 To 10) As Integer

indica un vettore con 10 elementi, il cui indice va da 1 a 10; analogamente si potrà scrivere:

Dim Var(10 To 20) As Long

oppure:

Dim Pippo(-5 To 32) As String

e così via. La seconda cosa da tenere presente è che, ovviamente, il limite inferiore deve sempre essere minore del limite superiore: perciò è sbagliato scrivere

Dim Var(10 To 0) As Integer

ed è anche sbagliato scrivere:

Dim Var(-5) As Integer

perché in questo caso il limite inferiore implicito è 0 o 1, che è maggiore di -5.

Archivio:
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it