Encuentro muchos ejemplos para resolverlo, pero nada en SWIFT. Por favor ayuda
Algo como esto
Entrada: n = 4 Salida: Sí 2 ^ 2 = 4
Entrada: n = 7 Salida: No
Entrada: n = 32 Salida: Sí 2 ^ 5 = 32
Necesitaba un algoritmo para verificar si un número es una potencia de 2. como 4, 8, 16, 32, 64 ... es una potencia de número de dos
3 respuestas
Determinar si un entero es una potencia de 2 del Bit Twiddling Hacks se traduce casi literalmente a Swift:
func isPowerOfTwo(_ n: Int) -> Bool {
return (n > 0) && (n & (n - 1) == 0)
}
Ejemplo:
print(isPowerOfTwo(4)) // true
print(isPowerOfTwo(5)) // false
O como una función genérica, para que pueda usarse con todos los binarios tipos enteros:
func isPowerOfTwo<T: BinaryInteger> (_ n: T) -> Bool {
return (n > 0) && (n & (n - 1) == 0)
}
Ejemplo:
print(isPowerOfTwo(Int16(4))) // true
print(isPowerOfTwo(UInt8(5))) // false
O como una extensión de protocolo :
extension BinaryInteger {
var isPowerOfTwo: Bool {
return (self > 0) && (self & (self - 1) == 0)
}
}
Ejemplo:
print(1048576.isPowerOfTwo) // true
print(Int(50).isPowerOfTwo) // false
let numberToBeChecked = 4
result = numberToBeChecked.squareRoot()
If result%1 == 0 {
print(“4 is a power of 2”) } else {
print(“4 is not a power of 2”)
}
//note: result%1== 0 checks if result is a whole number.
Espero que esto funcione.
Respuesta parcial:
Si es un FixedWidthInteger y es positivo y es el recuento de bits distinto de cero es 1, entonces es una potencia de 2.
let x = 128
if x > 0 && x.nonzeroBitCount == 1
{
// power of 2
}
Para un número de coma flotante, creo que puede probar el significand. Si es exactamente 1, el número es una potencia de 2.
let x: Double = 4
if x > 0 && x.significand == 1
{
// Power of 2
}
Todavía no lo he comprobado en un patio de juegos, por lo que podría estar mal.
Nuevas preguntas
swift
Swift es un lenguaje de programación seguro, rápido y expresivo de propósito general desarrollado por Apple Inc. para sus plataformas y Linux. Swift es de código abierto. Use la etiqueta solo para preguntas sobre las características del idioma o para solicitar código en Swift. Use las etiquetas [ios], [ipados], [macos], [watch-os], [tvos], [cocoa-touch] y [cocoa] para preguntas (independientes del lenguaje) sobre las plataformas o marcos.