我想知道如何在理论上将整数转换为字节。 我的意思是我不想使用预定义的程序,但我只想知道如何实现它。 我所知道,从-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中运行? 提前致谢
答案 0 :(得分:2)
该值超出Byte
范围,因此overflows。
参考JLS 4.2.1:
整数类型的值是以下范围内的整数:
- 对于字节,从-128到127,包括
醇>
一个字节是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
。