给定Int(IntValue)和(bitPosition),如何将bitPosition处的位设置为1或0



我正在努力理解Kotlin中的位运算符。我有一个7位的数字,想跟踪一周中的7天,以及给草浇水的日子,每天都用一个特定的位表示。

var Sunday=000000。。。var星期六=0b0000001

准备通过Kotlin文档显示此功能将一天(bitPosition(设置为1:

fun setDayEnabled(day: Int) {
scheduledWeek = scheduledWeek.or(day)
}

Kotlin文件中提到OR:";如果任一位是1,则给出1〃;。但我还没有找到一种方法来专门将一位设置为零。有办法做到这一点吗?

我真正喜欢的只是说";对于给定的Int,将第4位的位置设置为1或0";。这似乎是一个非常简单的请求,但似乎没有一个比特运算符是我想要的。我看到另一个类BitSet有这个功能,但我看不到将BitSet转换为Int的方法,所以这看起来是错误的选择。我错过了什么?

你可以这样做:

var scheduledWeek = 0b0011000
fun setDayDisabled(dayMask: Int) {
scheduledWeek = scheduledWeek and dayMask.inv()
}
fun main() {
println(scheduledWeek)
setDayDisabled(0b0010000)
println(scheduledWeek)
}

这将打印

24
8

如果你想通过索引来做到这一点,那么首先计算掩码为:

dayMask = 1 shl dayIndex

索引应基于0。

编辑:我对Kotlin不太熟悉,但我刚刚意识到使用中缀形式(例如a or b而不是a.or(b)(可能更习惯

最新更新