Kotlin`shl`不工作
我试图将shl
应用于Kotlin中的Int
值:
val a = 1092455 println(a.toString()) println(toString(bits(one))) println(toString(bits(one shl 16))) println(toString(bits(one shr 16)))
这会产生以下输出:
1092455 0000000000010000 1010101101100111 0000000000000000 0000000000000000 0000000000000000 0000000000010000
正如你所看到的, shr
正确的结果是最左边的16位( 0000000000010000
)被移到右边,但是shl
没有给出预期的输出( 1010101101100111 0000000000000000
)。
我错过了什么?
编辑: bits
方法:
fun bits(value: Int): BooleanArray { var x = value.toDouble() val result = BooleanArray (32) for (i in 31 downTo 0) { val d = Math.pow(2.0, i.toDouble()) if (x >= d) { x -= d result[i] = true } } return result }
数字值在Kotlin中签名,当您左移时,数值溢出到负数。 那么你正在使用的bits
的实现是无法正确打印位。
以下是它对我的作用:
val a = 1092455 println((a shr 16).toString(2)) println((a shl 15).toString(2)) println((a shl 16).toString(2))
打印:
10000 1010101101100111000000000000000 -1010100100110010000000000000000
这对我来说似乎是合理的。
要修复您的代码,请使用Long
值:
val a: Long = 1092455