如何解决给定一个IntIntValue和一个bitPosition,如何将bitPosition的位设置为1或0?
我试图了解Kotlin中的按位运算符。我有一个7位数字,想跟踪一周的7天以及每天浇水的那一天,每天由特定的位表示。
var Sunday = 0b1000000 ... var Saturday = 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不太熟悉,但是我只是意识到使用infix格式(例如,a or b
而不是a.or(b)
)可能更惯用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。