gpt4 book ai didi

kotlin - Kotlin `shl`无法正常工作

转载 作者:行者123 更新时间:2023-12-02 13:14:22 28 4
gpt4 key购买 nike

我正在尝试将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

关于kotlin - Kotlin `shl`无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47828163/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com