代码之家  ›  专栏  ›  技术社区  ›  stevenpcurtis

使用位运算清除第i位

  •  0
  • stevenpcurtis  · 技术社区  · 8 年前

    我的尝试如下

    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 回复  |  直到 8 年前
        1
  •  1
  •   David Rönnqvist    8 年前

    你在传递十进制数 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"