Sapere quanti bit posti ad 1 sono presenti in un numero
Vai alla navigazione
Vai alla ricerca
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( ): [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