Differenze tra le versioni di "Sapere quanti bit posti ad 1 sono presenti in un numero"
Da Gambas-it.org - Wikipedia.
(5 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
Per sapere quanti bit posti ad 1 sono presenti in un numero, è possibile utilizzare alcune modalità. | Per sapere quanti bit posti ad 1 sono presenti in un numero, è possibile utilizzare alcune modalità. | ||
+ | |||
+ | |||
+ | ===Uso della funzione specifica ''BTst( )''=== | ||
+ | Innanzitutto mostriamo una soluzione semplice utilizzando la funzione specifica ''BTst( )'': <SUP>[[[#Note|nota 1]]]</sup> | ||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim numero, i, bitauno As Byte | ||
+ | |||
+ | numero = 165 | ||
+ | |||
+ | For i = 0 To 7 | ||
+ | If BTst(numero, i) = True Then Inc bitauno | ||
+ | Next | ||
+ | |||
+ | Print "Il numero di bit a uno è: "; bitauno | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | ====Per valori superiori al Byte==== | ||
+ | '''Public''' Sub Main() <SUP>[[[#Note|nota 2]]]</sup> | ||
+ | |||
+ | Dim numero As Long | ||
+ | Dim i, nbit, bitauno As Byte | ||
+ | |||
+ | numero = 23750 | ||
+ | nbit = CByte(Log2(numero) + 1) | ||
+ | |||
+ | For i = 0 To nbit | ||
+ | If BTst(numero, i) = True Then Inc bitauno | ||
+ | Next | ||
+ | |||
+ | Print "Il numero di bit a 1 è: "; bitauno | ||
+ | |||
+ | '''End''' | ||
+ | |||
Riga 22: | Riga 57: | ||
===Uso dell'operatore aritmetico ''Mod''=== | ===Uso dell'operatore aritmetico ''Mod''=== | ||
− | '''Public''' Sub Main() <SUP>[[[#Note|nota | + | '''Public''' Sub Main() <SUP>[[[#Note|nota 3]]]</sup> |
Dim n, b, c As Integer | Dim n, b, c As Integer | ||
+ | Dim bb As New Byte[] | ||
− | n = | + | n = 23750 |
− | Print "La rappresentazione binaria di "; n; " è "; | + | Print "La rappresentazione binaria di "; n; " è "; |
While n > 0 | While n > 0 | ||
b = n Mod 2 | b = n Mod 2 | ||
− | + | bb.Push(b) | |
If b <> 0 Then Inc c | If b <> 0 Then Inc c | ||
n = n \ 2 | n = n \ 2 | ||
Wend | Wend | ||
− | Print " e contiene "; c; " bit posti a 1" | + | |
+ | bb.Reverse() | ||
+ | |||
+ | For b = 0 To bb.Max | ||
+ | Print bb[b]; | ||
+ | Next | ||
+ | |||
+ | Print " e contiene "; c; " bit a 1" | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | |||
+ | ===Mediante l'operatore AND e la funzione ''Lsl( )''=== | ||
+ | |||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim u As Byte | ||
+ | Dim i, d As Integer | ||
+ | |||
+ | i = 123456789 | ||
+ | |||
+ | For d = 31 To 0 Step -1 | ||
+ | If (i And Lsl(1, d)) > 0 Then | ||
+ | Inc u | ||
+ | Print "1"; | ||
+ | Else | ||
+ | Print "0"; | ||
+ | Endif | ||
+ | Next | ||
+ | |||
+ | Print "\n\nIl numero \""; i; "\" contiene "; u; " bit posti a 1" | ||
'''End''' | '''End''' | ||
Riga 44: | Riga 111: | ||
=Note= | =Note= | ||
− | [1] Questa soluzione è stata proposta dal membro [http://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] del forum www.gambas-it.org | + | [1] Questa soluzione è stata proposta dal membro [http://www.gambas-it.org/smf/index.php?action=profile;u=1038 TopFuel] del forum www.gambas-it.org |
+ | |||
+ | [2] Questa soluzione è stata proposta dai membri [http://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] e [http://www.gambas-it.org/smf/index.php?action=profile;u=1038 TopFuel] del forum www.gambas-it.org | ||
+ | |||
+ | [3] Questa soluzione è stata proposta dal membro [http://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] del forum www.gambas-it.org |
Versione attuale delle 19:40, 13 feb 2017
Per sapere quanti bit posti ad 1 sono presenti in un numero, è possibile utilizzare alcune modalità.
Indice
Uso della funzione specifica BTst( )
Innanzitutto mostriamo una soluzione semplice utilizzando la funzione specifica BTst( ): [nota 1]
Public Sub Main() Dim numero, i, bitauno As Byte numero = 165 For i = 0 To 7 If BTst(numero, i) = True Then Inc bitauno Next Print "Il numero di bit a uno è: "; bitauno End
Per valori superiori al Byte
Public Sub Main() [nota 2] Dim numero As Long Dim i, nbit, bitauno As Byte numero = 23750 nbit = CByte(Log2(numero) + 1) For i = 0 To nbit If BTst(numero, i) = True Then Inc bitauno Next Print "Il numero di bit a 1 è: "; bitauno End
Uso delle funzioni Bin( ) e Mid( )
Public Sub Main() Dim i, numero, c As Integer Dim binario As String numero = 1234567890 binario = Bin(numero) For i = 1 To len(binario) If Mid(binario, i, 1) = "1" Then Inc c Next Print numero; " contiene "; c; " bit posti a 1 ("; binario; ")" End
Uso dell'operatore aritmetico Mod
Public Sub Main() [nota 3] Dim n, b, c As Integer Dim bb As New Byte[] n = 23750 Print "La rappresentazione binaria di "; n; " è "; While n > 0 b = n Mod 2 bb.Push(b) If b <> 0 Then Inc c n = n \ 2 Wend bb.Reverse() For b = 0 To bb.Max Print bb[b]; Next Print " e contiene "; c; " bit a 1" End
Mediante l'operatore AND e la funzione Lsl( )
Public Sub Main() Dim u As Byte Dim i, d As Integer i = 123456789 For d = 31 To 0 Step -1 If (i And Lsl(1, d)) > 0 Then Inc u Print "1"; Else Print "0"; Endif Next Print "\n\nIl numero \""; i; "\" contiene "; u; " bit posti a 1" End
Note
[1] Questa soluzione è stata proposta dal membro TopFuel del forum www.gambas-it.org
[2] Questa soluzione è stata proposta dai membri Gianluigi e TopFuel del forum www.gambas-it.org
[3] Questa soluzione è stata proposta dal membro Gianluigi del forum www.gambas-it.org