Java 中从 int 到 byte 的显式转换
Explicit conversion from int to byte in Java
我正在尝试将 int 转换为 byte。
int i = 128;
byte b = (byte) i;
我知道字节的范围是-128 到 127,并且将整数存储到字节的规则是:
byte_value = int_vale % byte_Range; (我在完整参考中发现 Java)
当我将其应用于 int 128 时,它应该是这样的:
byte_value = 128%256 = 128;
但是,它实际上是:-128
我无法理解这背后的实际逻辑。
请帮忙!!
转换为 byte
并不意味着 int_value % byte_range
。这意味着只有最后 8 个有效位保留在 byte
值中。起初这似乎意味着同样的事情,但 byte
s 已签名。
int
值128
是以下位:
00000000 00000000 00000000 10000000
保留最后8位后,结果是这样的:
10000000
现在,byte
中的最高位被解释为 -128,而不是 int
中的 +128。
值 128
溢出 byte
,结果为负,因为设置了最高有效位。
您可以简单地使用以下方法:
byteValue()
此 returns 此 Integer 的值作为一个字节。
您需要导入 Java.lang 或输入为:
Java.lang.Integer.byteValue()
逻辑很简单,Java数字总是用二进制补码符号。
现在一个字节有8位,128就是10000000
。当你这样做时
int i = 128
你最终得到:
i == 00000000 00000000 00000000 10000000
当你将它转换为一个字节时,最重要的 24 个字节被截断,所以你最终得到
b == 10000000
但是 Java byte
是有符号的,128 不能表示,因为它会溢出并环绕。所以发生的情况是该值最终为 128 - 256 = -128
(这是因为二进制补码)。
字节在Java中被视为signed值;正如您所指出的,一个字节的范围是 [-128,127]。 127 加 1 翻转符号位,这意味着 127 + 1 = -128.
我正在尝试将 int 转换为 byte。
int i = 128;
byte b = (byte) i;
我知道字节的范围是-128 到 127,并且将整数存储到字节的规则是:
byte_value = int_vale % byte_Range; (我在完整参考中发现 Java)
当我将其应用于 int 128 时,它应该是这样的:
byte_value = 128%256 = 128;
但是,它实际上是:-128
我无法理解这背后的实际逻辑。 请帮忙!!
转换为 byte
并不意味着 int_value % byte_range
。这意味着只有最后 8 个有效位保留在 byte
值中。起初这似乎意味着同样的事情,但 byte
s 已签名。
int
值128
是以下位:
00000000 00000000 00000000 10000000
保留最后8位后,结果是这样的:
10000000
现在,byte
中的最高位被解释为 -128,而不是 int
中的 +128。
值 128
溢出 byte
,结果为负,因为设置了最高有效位。
您可以简单地使用以下方法:
byteValue()
此 returns 此 Integer 的值作为一个字节。
您需要导入 Java.lang 或输入为:
Java.lang.Integer.byteValue()
逻辑很简单,Java数字总是用二进制补码符号。
现在一个字节有8位,128就是10000000
。当你这样做时
int i = 128
你最终得到:
i == 00000000 00000000 00000000 10000000
当你将它转换为一个字节时,最重要的 24 个字节被截断,所以你最终得到
b == 10000000
但是 Java byte
是有符号的,128 不能表示,因为它会溢出并环绕。所以发生的情况是该值最终为 128 - 256 = -128
(这是因为二进制补码)。
字节在Java中被视为signed值;正如您所指出的,一个字节的范围是 [-128,127]。 127 加 1 翻转符号位,这意味着 127 + 1 = -128.