我想用一位的整数表示形式清除第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的预期结果。
我要去哪里错了?
答案 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"