Kotlin`shl`无法正常工作

时间:2017-12-15 08:08:18

标签: kotlin bit-shift

我试图将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未提供预期的输出({{1} }})。

我错过了什么?

修改:1010101101100111 0000000000000000方法:

bits

1 个答案:

答案 0 :(得分:3)

数字值在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