我找到了很多解决它的例子,但在SWIFT中没有。请帮忙
像这样smthng输入:n = 4 输出:是的 2 ^ 2 = 4
输入:n = 7 输出:否
输入:n = 32 输出:是的 2 ^ 5 = 32
我需要算法来检查一个数字是否是2的幂。如4,8,16,32,64 ....是2的数字幂
答案 0 :(得分:4)
Determining if an integer is a power of 2 来自Bit Twiddling Hacks 几乎逐字翻译成Swift:
func isPowerOfTwo(_ n: Int) -> Bool {
return (n > 0) && (n & (n - 1) == 0)
}
示例:
print(isPowerOfTwo(4)) // true
print(isPowerOfTwo(5)) // false
或者作为泛型函数,以便它可以与所有二进制文件一起使用 整数类型:
func isPowerOfTwo<T: BinaryInteger> (_ n: T) -> Bool {
return (n > 0) && (n & (n - 1) == 0)
}
示例:
print(isPowerOfTwo(Int16(4))) // true
print(isPowerOfTwo(UInt8(5))) // false
或作为协议扩展名:
extension BinaryInteger {
var isPowerOfTwo: Bool {
return (self > 0) && (self & (self - 1) == 0)
}
}
示例:
print(1048576.isPowerOfTwo) // true
print(Int(50).isPowerOfTwo) // false
答案 1 :(得分:2)
部分答案:
如果它是FixedWidthInteger并且它是正数且其non zero bit count是1,则它是2的幂。
let x = 128
if x > 0 && x.nonzeroBitCount == 1
{
// power of 2
}
对于浮点数,我认为你可以测试significand。如果它正好是1,则该数字是2的幂。
let x: Double = 4
if x > 0 && x.significand == 1
{
// Power of 2
}
我还没有在Playground中检查过,所以可能是错误的。
答案 2 :(得分:-2)
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.
希望这有效。