swift - 使用按位运算快速清除第 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 的预期结果。
我哪里错了?
解决方案
您传递的是十进制数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"
推荐阅读
- android - 使用意图打开下载的文件
- python - 如何在 PowerPoint 演示文稿中使用 Pandas Styler 对象?
- html - 如何在css中自上而下之前从左到右流动多列元素?
- php - 解析 simpleXML
- r - 删除 data.table 中的所有重复项,添加带有标识符列表的列
- java - 在作为泛型的 binarySearch() 方法中使用关系运算符会产生错误。如何处理这种情况?
- python-3.x - 如何在 python 中将列表转换为具有特定格式的字典?
- c# - 如何在 .Net Core 中启动后添加 dbContext?
- android - 如何以编程方式更改 android.support.design.widget.FloatingActionButton 颜色
- react-native - ScrollView 不允许滚动,除非子组件是 Button 或 Touchable