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 | |
<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 | |
− | + | ris = i Or (1 * CInt(2 ^ bit)) <FONT Color=gray>' ''oppure così: '''ris = i Or Shl(1, CInt(bit))'''''</font> | |
− | + | 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, | + | 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 | |
<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 | |
− | + | ris = i And (-1 Xor (1 * CInt(2 ^ bit))) | |
− | + | ||
− | + | 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