Differenze tra le versioni di "Conoscere di un numero la posizione del primo bit da destra impostato a 1"

Da Gambas-it.org - Wikipedia.
 
Riga 4: Riga 4:
  
 
==Uso delle sole risorse di Gambas==
 
==Uso delle sole risorse di Gambas==
Mostriamo un semplice esempio con il numero 66:
+
Mostriamo un semplice esempio con il numero 8192:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim bi As String
+
   Dim e, l As Long
   Dim n, i As Integer
+
    
 +
  l = 8192
 +
  Print Bin(l, 64)
 
    
 
    
   n = 66
+
   While True
 +
    If (CInt(2 ^ e) And l) > 0 Then Break
 +
    Inc e
 +
  Wend
 
    
 
    
   bi = Bin(n)
+
   Inc e
 
    
 
    
   i = Len(bi) - (RInStr(bi, "1") - 1)
+
   Print "Il primo bit da destra posto a 1 è nella "; e; "^ posizione."
  if n = 0 then i = 0
 
  Print i
 
 
    
 
    
 
  '''End'''
 
  '''End'''
La rappresentazione binaria del numero 66 è la seguente: 010000<FONT Color=B22222><B>1</b></font>0; pertanto il primo bit a destra impostato ad 1 è il secondo.
 
<BR>Infatti il risultato del predetto esempio restituisce: 2.
 
 
  
  

Versione attuale delle 03:36, 14 feb 2017

Per conoscere di un numero la posizione del primo bit da destra impostato a 1, è possibile utilizzare almeno due modalità.

In entrambe le modalità seguenti se il numero è zero, ossia se nessun bit è impostato a 1, sarà restituito: zero.

Uso delle sole risorse di Gambas

Mostriamo un semplice esempio con il numero 8192:

Public Sub Main()

 Dim e, l As Long
 
  l = 8192
  Print Bin(l, 64)
  
  While True
    If (CInt(2 ^ e) And l) > 0 Then Break
    Inc e
  Wend
  
  Inc e
  
  Print "Il primo bit da destra posto a 1 è nella "; e; "^ posizione."
  
End


Uso della funzione ffs() della libreria esterna "/usr/include/strings.h"

Mostriamo un semplice esempio con il numero 66:

Library "libc:6"

' int ffs (int __i)
' Return the position of the first bit set in 1, or 0 if none are set.
Private Extern ffs(i As Integer) As Integer


Public Sub Main()
 
  Print ffs(66)
  
End