Differenze tra le versioni di "Sapere quanti bit posti ad 1 sono presenti in un numero"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Per sapere quanti bit posti ad 1 sono presenti in un numero, è sufficiente utilizzare il seguente semplice codice: '''Public''' Sub Main() Dim i, numero, c As Integer...")
 
 
(9 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, è sufficiente utilizzare il seguente semplice codice:
+
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>&#91;[[#Note|nota 1]]&#93;</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>&#91;[[#Note|nota 2]]&#93;</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'''
 +
 
 +
 
 +
 
 +
===Uso delle funzioni ''Bin( )'' e ''Mid( )''===
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
Riga 15: Riga 53:
 
    
 
    
 
  '''End'''
 
  '''End'''
 +
 +
 +
 +
===Uso dell'operatore aritmetico ''Mod''===
 +
'''Public''' Sub Main()  <SUP>&#91;[[#Note|nota 3]]&#93;</sup>
 +
 
 +
  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 [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à.


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