Autore Topic: Usare una variabile intera come array di flag  (Letto 451 volte)

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Usare una variabile intera come array di flag
« il: 01 Ottobre 2017, 00:55:46 »
Ecco un mio piccolo studio su come usare i singoli bit di una variabile intera come tanti flag vero/falso per tenere controllato se una serie di condizioni si verificano oppure no:

Codice: [Seleziona]
' Gambas class file

Private flags As Byte 'i nostri flag, saranno 8
Private variabile As Byte 'variabile di test
Public Const flag1 As Byte = 0 'costanti per sapere quali bit usare, da destra a sinistra
Public Const flag2 As Byte = 1
Public Const flag3 As Byte = 2
Public Const flag4 As Byte = 3
Public Const flag5 As Byte = 4
Public Const flag6 As Byte = 5
Public Const flag7 As Byte = 6
Public Const flag8 As Byte = 7

Public Sub Form_Open()
'controlliamo se il valore di variabile è inferiore a 100 oppure no usando il flag numero 5
variabile = Val(InputBox("Valore della variabile (0-255)?")) 'assegnamo un valore alla variabile
If variabile > 99 Then 'se vale 100 o superiore
   flags = BSet(flags, flag5) 'mettiamo a 1 il flag num. 5
Else
   flags = BClr(flags, flag5) ' 0 altrimenti
Endif
Print Bin$(flags, 8) 'stampiamo i flag in formato binario; se variabile è > di 99 il 5° bit da destra sarà 1, 0 altrimenti
'ora facciamo il test per vedere se il flag num. 5 è settato oppure no
If BTst(flags, flag5) = True Then 'se il 5° bit vale 1
   Print "Variabile è maggiore di 99: "; variabile
Else 'altrimenti vale 0
   Print "Variabile è minore di 100: "; variabile
Endif
End

Io ho usato una semplice variabile Byte, ma con un Long si possono tenere sotto controllo fino a 64 condizioni contemporaneamente.
E ovviamente si possono testare più condizioni contemporaneamente controllando più flag ogni volta.
« Ultima modifica: 01 Ottobre 2017, 00:57:43 da Top Fuel »
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.