Porre a 0 oppure a 1 un bit di un numero
Da Gambas-it.org - Wikipedia.
(Reindirizzamento da Porre a 1 un bit di un numero)
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