Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin`shl`不工作_Kotlin_Bit Shift - Fatal编程技术网

Kotlin`shl`不工作

Kotlin`shl`不工作,kotlin,bit-shift,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 000000000000000

我正在尝试将
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
没有给出预期的输出(
101010110111100000000000000

我错过了什么

编辑:
方法:

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中签名,当向左移位时,值溢出为负数。然后,您正在使用的
位的实现无法正确打印位

以下是它对我的作用:

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

你能提供
比特
实现吗?@voddan啊,
比特
实现没有考虑签名。FFS查看如何使用
toString(2)
打印我的answer@voddan是的,那更优雅,谢谢