【问题标题】:How can i convert an integer to byte? [duplicate]如何将整数转换为字节? [复制]
【发布时间】:2013-07-23 17:48:32
【问题描述】:

我想知道理论上如何将整数转换为字节。 我的意思是我不想使用预定义的程序,但我只想知道如何实现它。 我知道从-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 中是如何工作的? 提前致谢

【问题讨论】:

标签: java integer byte theory


【解决方案1】:

您不能将超过 127 的值转换为字节,因为它没有地方存储它。由于二进制中的 140 是 10001100,这意味着您需要一种至少存储 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        该值超出了Byte 的范围,因此超出了overflows

        参考JLS 4.2.1:

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

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

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

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

        【讨论】:

        • 我知道如何将其转换为字节?
        • @BenMansourNizar 你想要什么结果?它不能存储 140 !
        • @BenMansourNizar,理论上你可以在放置字节的部分时创建一个列表。但实际上这是整数或长整数。
        猜你喜欢
        • 2019-06-25
        • 2018-12-15
        • 2020-10-24
        • 2019-09-21
        • 2019-03-15
        • 1970-01-01
        • 1970-01-01
        • 2016-02-06
        • 1970-01-01
        相关资源
        最近更新 更多