如何将整数转换为字节?

时间:2013-07-24 10:04:20

标签: java integer byte theory

我想知道如何在理论上将整数转换为字节。 我的意思是我不想使用预定义的程序,但我只想知道如何实现它。 我所知道,从-128到127整数与字节相同,但问题是从128到128到+无限,从-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 个答案:

答案 0 :(得分:2)

该值超出Byte范围,因此overflows

参考JLS 4.2.1

  

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

     
      
  1. 对于字节,从-128到127,包括
  2.   

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

阅读这篇精彩的SO answer了解更多信息。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

当你缩小基元时,你必须明确地进行转换 - 所以你承认可能会丢失数据。

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

答案 3 :(得分:0)

您无法将值转换为127转换为字节,因为它没有地方存储它。由于二进制140是10001100,这意味着你需要一个至少存储8位的类型。一个字节存储8位,但其中一个保留用于符号。所以你不能适应它。您可以使用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