在Kotlin中大量转换为Byte

时间:2017-06-05 14:42:23

标签: kotlin

为什么转化为ALTER PROCEDURE myStoredProc (@variable1 INT, @variable2 INT, @variable3 INT) double的{​​{1}}会在Kotlin中产生65555的结果?

3 个答案:

答案 0 :(得分:9)

这是因为从较宽类型到较小尺寸类型的数字转换。 DoubleIEEE 754 double precision number)有其不可分割的部分,因为第65555 = 2 17 + 2 4 + 2 2 + 2 0 = 65536 + 16 + 2 + 1,以二进制形式存储为(较高位到较低位):

 ‭... 0 1  0 0 0 0 0 0 0 0  0 0 0 1 0 0 1 1‬

当此数字转换为Byte时,仅保留其最低8位:

 ... _ ‭_  _ _ _ _ _ _ _ _  0 0 0 1 0 0 1 1‬

结果为2 4 + 2 2 + 2 0 = 16 + 2 + 1 = 19.

答案 1 :(得分:3)

因为当您将65555(或65555.0)转换为二进制表示时,它需要多个字节。所以调用.toByte()取最低值,即19。

65555 -> Binary == 1 00000000 00010011
                   ^ ^^^^^^^^ ^^^^^^^^
                   1     0       19

答案 2 :(得分:1)

双65555.0转换为整数65555,即0x10013。转换为字节需要较低的字节,即0x13(十进制19)。