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 adottare il seguente codice (per valori non superiori a 32 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
 +
 +
<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()
 
  '''Public''' Sub Main()
 
   
 
   
Riga 5: Riga 26:
 
   Dim bit As Byte
 
   Dim bit As Byte
 
    
 
    
  <FONT Color=gray>' ''Valore iniziale:''</font>
+
  <FONT Color=gray>' ''Valore iniziale:''</font>
  i = 888
+
  i = 888
 
      
 
      
 
  <FONT Color=gray>' ''Del valore iniziale pone a 1 l'ottavo bit (indice 0 - 31):''</font>
 
  <FONT Color=gray>' ''Del valore iniziale pone a 1 l'ottavo bit (indice 0 - 31):''</font>
  bit = 7
+
  bit = 7
 
    
 
    
  ris = i Or (1 * CInt(2 ^ bit))  <FONT Color=gray>' ''oppure così: '''ris = i Or Shl(1, CInt(bit))'''''</font>
+
  ris = i Or (1 * CInt(2 ^ bit))  <FONT Color=gray>' ''oppure così: '''ris = i Or Shl(1, CInt(bit))'''''</font>
 
      
 
      
  Print ris
+
  Print ris
 
+
 
 
  '''End'''
 
  '''End'''
 
  
  
 
===Porre a zero un bit===
 
===Porre a zero un bit===
Se, invece, si vuole porre a zero un bit di un numero, potremo utilizzare il sguente codice (per valori non superiori a 32 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()
 
  '''Public''' Sub Main()
 
   
 
   
Riga 27: Riga 68:
 
    
 
    
 
  <FONT Color=gray>' ''Valore iniziale:''</font>   
 
  <FONT Color=gray>' ''Valore iniziale:''</font>   
  i = 65535
+
  i = 65535
 
      
 
      
 
  <FONT Color=gray>' ''Del valore iniziale pone a 0 il nono bit (indice 0 - 31):''</font>
 
  <FONT Color=gray>' ''Del valore iniziale pone a 0 il nono bit (indice 0 - 31):''</font>
  bit = 8
+
  bit = 8
 
    
 
    
  ris = i And (-1 Xor (1 * CInt(2 ^ bit)))
+
  ris = i And (-1 Xor (1 * CInt(2 ^ bit)))
   
+
 
  Print ris
+
  Print ris
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 11:43, 20 set 2022

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 zero un bit di un numero, possiamo usare l'operatore "OR", 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 Or 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