使用按位操作快速清除第i位

时间:2018-10-18 08:55:39

标签: swift

我想用一位的整数表示形式清除第ith个元素。

我的尝试如下

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的预期结果。

我要去哪里错了?

1 个答案:

答案 0 :(得分:1)

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

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

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

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