如何在Kotlin中获得Int的二进制表示
有没有一种方法可以用来获取整数的位表示形式?例如,如果提供: 0等于0 4等于100 22给出10110方法1: 使用如何在Kotlin中获得Int的二进制表示,kotlin,binary,bit,Kotlin,Binary,Bit,有没有一种方法可以用来获取整数的位表示形式?例如,如果提供: 0等于0 4等于100 22给出10110方法1: 使用Integer.toBinaryString(a)其中a是一个Int。此方法来自Java平台,可在Kotlin中使用。 有关此方法的详细信息,请访问 注:此方法适用于正整数和负整数 方法2: 使用a.toString(2)其中a是整数,2是基数 注:此方法仅适用于正整数。从Kotlin 1.3开始,有符号整数的二进制表示形式可以通过将其重新解释为无符号整数并将其转换为字符串基数2
Integer.toBinaryString(a)
其中a
是一个Int。此方法来自Java平台,可在Kotlin中使用。
有关此方法的详细信息,请访问
注:此方法适用于正整数和负整数
方法2:
使用a.toString(2)
其中a
是整数,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")
}
这样叫这个方法,,
数字转换到二进制(长度)
我想要一个打印出整数所有位的32位二进制表示的函数。其他答案中提到的标准库函数不能做到这一点。但是,正如Rashi Karanpuria指出的那样,可以通过结合Kotlin stdlib函数来实现: 输出:
10000000000000000000000000000000
11111111111111111111111111111111
00000000000000000000000000000000
00000000000000000000000000000001
01111111111111111111111111111111
如果您的数字大于整数,则可以使用BigInteger
val binaryString = BigInteger("12345678987654321").toString(2)
不过要注意负数<代码>(-2)。toString(2)将是
-10
,而不是1111111111111111 0
。所以你得到的是数字,而不是它的位表示形式。@ilya那么我们如何处理负整数呢?@RashiKaranpuria你必须用字符串表示形式中的负号来解释这些信息。由于2的补充是不可用的(至少现在是这样),在我看来,没有其他干净的管理方法。如果我遗漏了什么,请纠正我。(我是Kotlin的新手,可能在某个地方错过了细节)如果您想要前导零:Integer.toBinaryString(1).padStart(Int.SIZE_BITS,'0')
(添加了一个更详细的答案)。从1.4开始,这仍将生成警告。此声明是实验性的,其用法应标记为'@kotlin.ExperimentalUnsignedTypes
。这是最佳解决方案
10000000000000000000000000000000
11111111111111111111111111111111
00000000000000000000000000000000
00000000000000000000000000000001
01111111111111111111111111111111
val binaryString = BigInteger("12345678987654321").toString(2)