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 
    Interesting Posts