Autore Topic: Verificare se un numero è una Potenza di 2  (Letto 314 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.331
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.703
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Verificare se un numero è una Potenza di 2
« Risposta #1 il: 26 Agosto 2016, 21:16:49 »
 :ciao:
Riporto il codice per chiarezza:
Codice: [Seleziona]
Public Sub Main()

  Dim num, m, c As Integer
  Dim s1, s2 As String

    m = 1
    num = 16    ' El número eligido...
 
    While m > 0
      If (num And m) > 0 Then
       Inc c
    Endif
        m = m * CInt(2 * 1)
    Wend

    s1 = "El número " & num
    s2 = " es una potencia de 2"

    If c = 1 Then
      Print s1; s2
    Else
      Print s1; " no"; s2
   
    Endif

End
Nel ciclo While mi succede qualcosa che non capisco:
m è maggiore di zero (=1)
num è maggiore di zero (=16)
Perchè allora non si incrementa c, che rimane a zero? :-\
Cosa non ho capito?
 :ciao: :ciao:
« Ultima modifica: 26 Agosto 2016, 21:44:52 da kicco »
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.331
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Verificare se un numero è una Potenza di 2
« Risposta #2 il: 26 Agosto 2016, 22:29:42 »

Perchè allora non si incrementa c, che rimane a zero?
Perché in questo caso l'AND è un Operatore bitwise e non un Operatore logico.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »