Kotlin 如何将 Long 转换为 Int?为超出范围的值获取不同的输出
How Kotlin converts Long to Int? Getting different outputs for out of range values
我有几行代码将 Long
值转换为 Int
。据我所知,如果 Long
值大于 Int.MAX_VALUE
,即 2147483647
,它将截断 Long
值以在 Int
中给出结果。我尝试了不同的例子:
val num1: Long = 5453448989999998988
val num2: Int = num1.toInt()
给予
num2 = 2041161740
val num1: Long = 5453448989999998
val num2: Int = num1.toInt()
给予
num2 = 165249918
两个输入都超出范围。但我的问题是 为什么我得到不同的输出 因为我期待截断的输出。
Kotlin 确实截断了你的数字,但它是二进制形式:
5453448989999998988
在二进制中是 0100101110101110100010101111011001111001101010011010100000001100
。
然后取它的低 32 位:01111001101010011010100000001100
那就是你的 Int
,即 2041161740。
我有几行代码将 Long
值转换为 Int
。据我所知,如果 Long
值大于 Int.MAX_VALUE
,即 2147483647
,它将截断 Long
值以在 Int
中给出结果。我尝试了不同的例子:
val num1: Long = 5453448989999998988
val num2: Int = num1.toInt()
给予
num2 = 2041161740
val num1: Long = 5453448989999998
val num2: Int = num1.toInt()
给予
num2 = 165249918
两个输入都超出范围。但我的问题是 为什么我得到不同的输出 因为我期待截断的输出。
Kotlin 确实截断了你的数字,但它是二进制形式:
5453448989999998988
在二进制中是 0100101110101110100010101111011001111001101010011010100000001100
。
然后取它的低 32 位:01111001101010011010100000001100
那就是你的 Int
,即 2041161740。