Averiguar Si Un Número Es Una Potencia De 2


Objetivo: Averiguar Si Un Número Es Una Potencia De 2
Dejo una propuesta de código para averiguar si un número es una potencia de 2.

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

última edición por vuott el Miercoles, 06 Julio 2016, 12:50; editado 2 veces
Perfil MP  
Objetivo: Re: Averiguar Si Un Número Es Una Potencia De 2
Otro método súper corto y sencillo:

Dim number As Integer
number = 32

Print IIf(Frac(Log2(number)) = 0, "Es potencia de 2", "NO es potencia de 2")


La expresión Log2(number) Mod 1 = 0 es equivalente, pero Mod no funciona con Float.

Saludos

Perfil MP  
Objetivo: Re: Averiguar Si Un Número Es Una Potencia De 2
jguardon escribió: [Ver mensaje]
.... pero Mod no funciona con Float.


Tal vez hay una alternativa... al usar la función externa fmod( ) o drem( ), declarada en el archivo header /usr/include/x86_64-linux-gnu/bits/mathcalls.h.


Exemplum simplex et minimum:
Library "libm:6"

' fmod (_Mdouble_ __x, _Mdouble_ __y)
' Floating-point modulo remainder of X/Y.
Private Extern fmod(__x As Float, __y As Float) As Float


Public Sub Main()

Dim f As Float

f = fmod(23.123, 7.076)

Print f

End
neutral

última edición por vuott el Miercoles, 17 Agosto 2016, 16:29; editado 2 veces
Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1322s (PHP: -31% SQL: 131%)
Consultas SQL: 24 - Debug off - GZIP Activado