Java 到 Byte() 将整数转换为不同的值
Java toByte() coverts integer to different values
谁能解释一下..
val randomId: Byte
randomId = 50.toByte() // randomId = 50
而
randomId = 1149.toByte() // randomId = 125, while I'd expect it to be 1149?
我错过了什么?谢谢
我想您使用的是 scala 或 kotlin 而不是 java。无论如何,问题是字节范围从 -128 到 127,因为字节类型是 8 位有符号类型,所以它不能存储数字 1149
我不知道 Kotlin 会发生什么,但在 Java 中,情况 crystal 很清楚。
原始类型 byte
的值存储在一个字节(8 位)中,可以表示 -127 到 128 之间的数字范围,正如@JArgente 所说。
如果您尝试拟合超出该范围的数字,则会产生所谓的“字节溢出”错误,最终您会得到完全不同的结果。
在你的例子中,整数 1149 的二进制表示是“0000 0100 0111 1101”(请记住 Java 表示一个 32 位值,我只显示了前两个) .所以,为了把你的数字放在一个字节中,JVM 取前 8 位而忽略其余的,你得到的是“0111 1101”,这是 125.
[=11 的二进制表示=]
如果第一个有效位是“1”,情况会更加复杂,因为 JVM 会将其视为负字节数,并将其表示为 2 的补码。 :)
我不是这方面的专家,但据我所知,Kotlin 与 JVM 是 运行,所以我想原始数字的处理方式或多或少是相同的。因此,您可以预料,情况正是我上面所解释的。
谁能解释一下..
val randomId: Byte
randomId = 50.toByte() // randomId = 50
而
randomId = 1149.toByte() // randomId = 125, while I'd expect it to be 1149?
我错过了什么?谢谢
我想您使用的是 scala 或 kotlin 而不是 java。无论如何,问题是字节范围从 -128 到 127,因为字节类型是 8 位有符号类型,所以它不能存储数字 1149
我不知道 Kotlin 会发生什么,但在 Java 中,情况 crystal 很清楚。
原始类型 byte
的值存储在一个字节(8 位)中,可以表示 -127 到 128 之间的数字范围,正如@JArgente 所说。
如果您尝试拟合超出该范围的数字,则会产生所谓的“字节溢出”错误,最终您会得到完全不同的结果。
在你的例子中,整数 1149 的二进制表示是“0000 0100 0111 1101”(请记住 Java 表示一个 32 位值,我只显示了前两个) .所以,为了把你的数字放在一个字节中,JVM 取前 8 位而忽略其余的,你得到的是“0111 1101”,这是 125.
[=11 的二进制表示=]
如果第一个有效位是“1”,情况会更加复杂,因为 JVM 会将其视为负字节数,并将其表示为 2 的补码。 :)
我不是这方面的专家,但据我所知,Kotlin 与 JVM 是 运行,所以我想原始数字的处理方式或多或少是相同的。因此,您可以预料,情况正是我上面所解释的。