Kotlin二进制if条件

smtd7mpg  于 12个月前  发布在  Kotlin
关注(0)|答案(1)|浏览(226)

我对这个节目很困惑。

fun main(args: Array<String>) {
    val condition1 = true
    val condition2 = false
    val condition3 = true

    val state = (if (condition1) 1 else 0) shl 2 or
            (if (condition2) 1 else 0) shl 1 or
            (if (condition3) 1 else 0)

    println(state)

    when (state) {
        0b100 -> println("Only condition1 is true.")
        0b010 -> println("Only condition2 is true.")
        0b001 -> println("Only condition3 is true.")
        0b101 -> println("condition1 and condition3 are true.")
        0b110 -> println("condition1 and condition2 are true.")
        0b011 -> println("condition2 and condition3 are true.")
        0b111 -> println("All conditions are true.")
        else -> println("All conditions are false.")
    }
}

字符串
我期望打印“condition1 and condition3 are true.”.但这段代码总是返回else块“All conditions are false.”
此外,我的IDE警告'永远无法访问'如下。


的数据
为什么会这样?有人能帮帮我吗?

4urapxun

4urapxun1#

你忘记了一些括号,你的表达式的第一行的结果是用(if (condition2) 1 else 0)得到或艾德,然后整个结果左移了1,所以现在第一个1已经左移了3。
在第二行添加括号以修复它:

val state = (if (condition1) 1 else 0) shl 2 or
        ((if (condition2) 1 else 0) shl 1) or
        (if (condition3) 1 else 0)

字符串
实际上,只有一个分支是可到达的,因为你只使用局部常量输入和局部计算。编译器只警告你它足够复杂可以检测到的那些分支。

相关问题