首页 > 解决方案 > 使用按位运算快速清除第 i 位

问题描述

我想以位的整数表示形式清除第 i 个元素。

我的尝试如下

func clearBit (num: Int, i: Int) -> Int{
    let mask = (~(1 << i))
    return ( num & mask )
}

现在我的第一个示例按预期工作:

clearBit(num: 10011, i: 0) // == 10010

但是,删除第一个元素

clearBit(num: 10011, i: 1) // == 10009

不等于 10010 的预期结果。

我哪里错了?

标签: swift

解决方案


您传递的是十进制数10011,而不是带有位的二进制数1 0 0 1 10b如果您希望将其视为二进制,则应在数字文字前加上:

let number = 0b10011        // 19
clearBit(num: number, i: 1) // 17

稍后,如果您想将这些数字显示为二进制,您可以将它们转换为以 2 为底的字符串:

String(19, radix: 2) // "10011"
String(17, radix: 2) // "10001"

推荐阅读