如何在 Kotlin 中获取 Int 的二进制表示
How to get binary representation of Int in Kotlin
有没有一种方法可以用来获取整数的位表示?例如,当提供时:
0 给 0
4给100
22 给出 10110
方法一:
使用 Integer.toBinaryString(a)
,其中 a
是 Int。该方法来自Java平台,可在Kotlin中使用。
在 https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toBinaryString(int)
找到更多关于此方法的信息
注意:此方法对正整数和负整数都有效。
方法二:
使用 a.toString(2)
其中 a
是 Int,2
是基数
注意:此方法仅适用于正整数。
从 Kotlin 1.3 开始,有符号整数的二进制表示可以通过将其重新解释为无符号整数并将其转换为以 2 为基数的字符串来获得:
a.toUInt().toString(radix = 2)
我正在使用此方法将整数转换为二进制,
fun Int.toBinary(len: Int): String {
return String.format("%" + len + "s", this.toString(2)).replace(" ".toRegex(), "0")
}
像这样调用这个方法,
numberToBeConvert.toBinary(长度)
4.toBinary(8) = 00000100
我想要一个打印出整数所有位的 32 位二进制表示的函数。其他答案中提到的标准库函数不会这样做。但是,可以通过组合 Integer.toBinaryString()
as Rashi Karanpuria pointed out with the Kotlin stdlib function padStart()
:
来完成
fun Int.to32bitString(): String =
Integer.toBinaryString(this).padStart(Int.SIZE_BITS, '0')
fun main() {
println(Int.MIN_VALUE.to32bitString())
println((-1).to32bitString())
println(0.to32bitString())
println(1.to32bitString())
println(Int.MAX_VALUE.to32bitString())
}
输出:
10000000000000000000000000000000
11111111111111111111111111111111
00000000000000000000000000000000
00000000000000000000000000000001
01111111111111111111111111111111
如果您无权访问 Integer.toBinaryString()
的等效方法:Int.toString(2)
适用于正整数,但它不打印前导零,并保留符号 ((-1).toString(2)
returns "-1"
而不是一串 1
位)。如果我们将整数的各个字节移动到 least-significant 字节,该值将始终为正数。我们可以使用 Int.toString(2)
来单独获得每个字节的表示,然后将它们重新组合在一起(也适用于 Long
):
fun Int.toBinaryString(): String = let { int ->
IntProgression
.fromClosedRange(rangeStart = Int.SIZE_BITS - 8, rangeEnd = 0, step = -8)
.joinToString("") { bytePos ->
(int shr bytePos and 0xFF).toString(2).padStart(8, '0')
}
}
如果你有比 Integer 更大的数字,你可以使用 BigInteger。
val binaryString = BigInteger("12345678987654321").toString(2)
有没有一种方法可以用来获取整数的位表示?例如,当提供时: 0 给 0 4给100 22 给出 10110
方法一:
使用 Integer.toBinaryString(a)
,其中 a
是 Int。该方法来自Java平台,可在Kotlin中使用。
在 https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toBinaryString(int)
注意:此方法对正整数和负整数都有效。
方法二:
使用 a.toString(2)
其中 a
是 Int,2
是基数
注意:此方法仅适用于正整数。
从 Kotlin 1.3 开始,有符号整数的二进制表示可以通过将其重新解释为无符号整数并将其转换为以 2 为基数的字符串来获得:
a.toUInt().toString(radix = 2)
我正在使用此方法将整数转换为二进制,
fun Int.toBinary(len: Int): String {
return String.format("%" + len + "s", this.toString(2)).replace(" ".toRegex(), "0")
}
像这样调用这个方法, numberToBeConvert.toBinary(长度)
4.toBinary(8) = 00000100
我想要一个打印出整数所有位的 32 位二进制表示的函数。其他答案中提到的标准库函数不会这样做。但是,可以通过组合 Integer.toBinaryString()
as Rashi Karanpuria pointed out with the Kotlin stdlib function padStart()
:
fun Int.to32bitString(): String =
Integer.toBinaryString(this).padStart(Int.SIZE_BITS, '0')
fun main() {
println(Int.MIN_VALUE.to32bitString())
println((-1).to32bitString())
println(0.to32bitString())
println(1.to32bitString())
println(Int.MAX_VALUE.to32bitString())
}
输出:
10000000000000000000000000000000
11111111111111111111111111111111
00000000000000000000000000000000
00000000000000000000000000000001
01111111111111111111111111111111
如果您无权访问 Integer.toBinaryString()
的等效方法:Int.toString(2)
适用于正整数,但它不打印前导零,并保留符号 ((-1).toString(2)
returns "-1"
而不是一串 1
位)。如果我们将整数的各个字节移动到 least-significant 字节,该值将始终为正数。我们可以使用 Int.toString(2)
来单独获得每个字节的表示,然后将它们重新组合在一起(也适用于 Long
):
fun Int.toBinaryString(): String = let { int ->
IntProgression
.fromClosedRange(rangeStart = Int.SIZE_BITS - 8, rangeEnd = 0, step = -8)
.joinToString("") { bytePos ->
(int shr bytePos and 0xFF).toString(2).padStart(8, '0')
}
}
如果你有比 Integer 更大的数字,你可以使用 BigInteger。
val binaryString = BigInteger("12345678987654321").toString(2)