Porre a 0 oppure a 1 un bit di un numero

Da Gambas-it.org - Wikipedia.

Porre a Uno un bit

Per porre a 1 il bit di un valore numerico, possiamo usare l'operatore "OR", come segue:

 Public Sub Main()

 Dim i, bit, ris As Integer

' Valore iniziale:
 i = 888
 Print Bin(i, 32)

' Individua il valore simile a quello iniziale, ma avente il solo ottavo bit posto a 1:
 bit = 128
 Print Bin(bit, 32), "<-----"

' Con l'operatore "OR" pone a 1 l'ottavo bit del valore iniziale da modificare:
 ris = i Or bit
 Print Bin(ris, 32)

' Verifica il risultato, ossia il valore iniziale come modificato:
 Print ris

End

oppure adottare il seguente codice (per valori non superiori a 32 bit):

Public Sub Main()

 Dim i, ris As Integer
 Dim bit As Byte
 
' Valore iniziale:
 i = 888
   
' Del valore iniziale pone a 1 l'ottavo bit (indice 0 - 31):
 bit = 7
  
 ris = i Or (1 * CInt(2 ^ bit))   ' oppure così: ris = i Or Shl(1, CInt(bit))
   
 Print ris
 
End


Porre a Zero un bit

Se, invece, si vuole porre a 0 un bit di un numero, possiamo usare l'operatore "AND", come segue:

 Public Sub Main()

 Dim i, bit, ris As Integer

' Valore iniziale:
 i = 1016
 Print Bin(i, 32)

' Individua il valore simile a quello iniziale, ma avente il solo ottavo bit posto a 0:
 bit = 888
 Print Bin(bit, 32), "<-----"

' Con l'operatore "AND" pone a 0 l'ottavo bit del valore iniziale da modificare:
 ris = i And bit
 Print Bin(ris, 32)

' Verifica il risultato, ossia il valore iniziale come modificato:
 Print ris

End

oppure il seguente codice (per valori non superiori a 32 bit):

Public Sub Main()

 Dim i, ris As Integer
 Dim bit As Byte
 
' Valore iniziale:  
 i = 65535
   
' Del valore iniziale pone a 0 il nono bit (indice 0 - 31):
 bit = 8
  
 ris = i And (-1 Xor (1 * CInt(2 ^ bit)))
 
 Print ris

End