1

我想知道如何在理论上将整数转换为字节。我的意思是我不想使用预定义的程序,但我只想知道如何实现它。我知道从-128 到 127 的整数与字节相同,但问题是从 128 到 128 到 +infinite 以及从 -129 到 -infinite。例如给出以下代码:

    Integer a = 140;//10001100 this is his binary conversion
    Byte zz = (byte) a.byteValue();
    System.out.println(zz);// result is -116

这种转换在java中是如何工作的?提前致谢

4

4 回答 4

3

该值超出范围,Byte因此溢出

请参阅JLS 4.2.1

整数类型的值是以下范围内的整数:

  1. 对于字节,从 -128 到 127(含)

一个字节是8bits ,最高有效位指定数字的符号,并以二进制补码形式编码。

阅读这个精彩的SO 答案以获取更多信息。

于 2013-07-24T10:06:15.723 回答
1

字节值二进制表示不会改变,它仍然会改变,10001100但它会被不同地解释,因为byte它是二进制补码表示中的有符号类型http://en.wikipedia.org/wiki/Twos_complement并且由于设置了第 7 位,这意味着现在是负数 -116

于 2013-07-24T10:14:11.273 回答
1

当您缩小原语时,您必须明确地进行强制转换 - 因此您承认可能丢失数据。

如果值在 -128...127 字节值范围内,则不会丢失

于 2013-07-24T10:18:03.850 回答
0

您不能将超过 127 的值转换为字节,因为它没有地方存储它。二进制中的 14010001100意味着您需要一种至少存储 8 位的类型。一个字节存储 8 位,但其中一个保留用于符号。所以你不能把它放进去。您可以使用 short Witch 存储 16 位(15 和 1 表示符号)。

不同类型中的零以二进制表示;

byte  b = 0b000_0000;
short s = 0b000_0000_0000_0000;
int   i = 0b000_0000_0000_0000_0000_0000_0000_0000;

如果您尝试声明如下内容:

byte  b = 0b1000_1100;

编译器会让你高大Type mismatch: cannot convert from int to byte上。

于 2013-07-24T10:40:03.483 回答