You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中判断一个数是否为2的幂的实现方法求助

Swift实现判断一个数是否为2的幂并输出指定结果

我来帮你搞定Swift版本的实现,完全贴合你要的输出格式~

首先明确核心逻辑:一个正整数是2的幂的充要条件是,它的二进制表示里只有一个1,且数值大于0。利用位运算特性,我们可以用n & (n - 1) == 0快速验证这个条件(减去1会把最右边的1翻转为0,后面的0全翻转为1,与运算后结果为0)。

下面是完整的Swift实现,包含判断逻辑和你需要的格式化输出:

func checkPowerOfTwo(_ input: Int) {
    // 先排除非正整数的情况
    guard input > 0 else {
        print("No")
        return
    }
    
    // 判断是否为2的幂
    if (input & (input - 1)) == 0 {
        // 高效计算对应的指数:利用Int的leadingZeroBitCount属性
        let exponent = input.bitWidth - input.leadingZeroBitCount - 1
        print("Yes 2^\(exponent)=\(input)")
    } else {
        print("No")
    }
}

// 示例调用,完全匹配你的测试需求
checkPowerOfTwo(4)   // 输出: Yes 2^2=4
checkPowerOfTwo(7)   // 输出: No
checkPowerOfTwo(32)  // 输出: Yes 2^5=32
checkPowerOfTwo(64)  // 输出: Yes 2^6=64
checkPowerOfTwo(16)  // 输出: Yes 2^4=16

代码细节解释:

  • 判断逻辑:input & (input - 1) == 0是判断2的幂的经典位运算方法,时间复杂度O(1),同时我们先确保input是正整数——0和负数不可能是2的幂。
  • 指数计算:input.leadingZeroBitCount会返回数字二进制中最高位1左侧的0的个数,结合Int的总位数bitWidth,用bitWidth - leadingZeroBitCount - 1就能直接算出对应的指数,比循环移位或对数计算更准确(对数容易因浮点数精度出问题)。
  • 输出格式:严格按照你要求的格式输出,完美适配4、8、16等目标测试用例。

如果需要处理超大范围的数字,只需把代码里的Int换成UInt64,逻辑完全通用。

内容的提问来源于stack exchange,提问作者YoungLee Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:55:40