Differenze tra le versioni di "Porre a 1 un bit di un numero"

Da Gambas-it.org - Wikipedia.
 
Riga 1: Riga 1:
Per porre a 1 il bit di un valore numerico, possiamo usare l'operatore "OR", come segue:
+
#REDIRECT [[Porre a 0 oppure a 1 un bit di un numero]]
  '''Public''' Sub Main()
 
 
  Dim i, bit, ris As Integer
 
 
<FONT Color=gray>' ''Valore iniziale:''</font>
 
  i = 888
 
  Print Bin(i, 32)
 
 
<FONT Color=gray>' ''Individua il valore simile a quello iniziale, ma avente il solo ottavo bit posto a 1:''</font>
 
  bit = 128
 
  Print Bin(bit, 32), "<-----"
 
 
<FONT Color=gray>' ''Con l'operatore "OR" pone a '''1''' l'ottavo bit del valore iniziale da modificare:''</font>
 
  ris = i <FONT Color=#B22222><B>Or</b></font> bit
 
  Print Bin(ris, 32)
 
 
<FONT Color=gray>' ''Verifica il risultato, ossia il valore iniziale come modificato:''</font>
 
  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
 
 
 
<FONT Color=gray>' ''Valore iniziale:''</font>
 
  i = 888
 
   
 
<FONT Color=gray>' ''Del valore iniziale pone a 1 l'ottavo bit (indice 0 - 31):''</font>
 
  bit = 7
 
 
 
  ris = i Or (1 * CInt(2 ^ bit))  <FONT Color=gray>' ''oppure così: '''ris = i Or Shl(1, CInt(bit))'''''</font>
 
   
 
  Print ris
 
 
 
'''End'''
 
 
 
 
 
===Porre a zero un bit===
 
Se, invece, si vuole porre a zero un bit di un numero,  possiamo usare l'operatore "OR", come segue:
 
  '''Public''' Sub Main()
 
 
  Dim i, bit, ris As Integer
 
 
<FONT Color=gray>' ''Valore iniziale:''</font>
 
  i = 1016
 
  Print Bin(i, 32)
 
 
<FONT Color=gray>' ''Individua il valore simile a quello iniziale, ma avente il solo ottavo bit posto a 0:''</font>
 
  bit = 888
 
  Print Bin(bit, 32), "<-----"
 
 
<FONT Color=gray>' ''Con l'operatore "AND" pone a '''0''' l'ottavo bit del valore iniziale da modificare:''</font>
 
  ris = i <FONT Color=#B22222><B>Or</b></font> bit
 
  Print Bin(ris, 32)
 
 
<FONT Color=gray>' ''Verifica il risultato, ossia il valore iniziale come modificato:''</font>
 
  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
 
 
 
<FONT Color=gray>' ''Valore iniziale:''</font> 
 
  i = 65535
 
   
 
<FONT Color=gray>' ''Del valore iniziale pone a 0 il nono bit (indice 0 - 31):''</font>
 
  bit = 8
 
 
 
  ris = i And (-1 Xor (1 * CInt(2 ^ bit)))
 
 
 
  Print ris
 
 
'''End'''
 

Versione attuale delle 11:47, 20 set 2022