【问题标题】:Minimum value can't be saved in byte最小值不能保存在字节中
【发布时间】:2018-12-06 14:57:45
【问题描述】:

根据https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,Java中的一个字节是:

"字节数据类型为8位带符号二进制补码整数,最小值为-128,最大值为127(含)。"

如果我在 Java 中以二进制补码形式写入最大值 (127),我可以将其保存为字节类型。

byte positive127 = 0b01111111;

但是,如果我尝试对最小值 -128 执行相同操作,则会将其解释为整数。我无法将其保存为一个字节。

byte negative127 = 0b10000000;

Picture from IDE

当文档声明字节类型应该能够保持这个值时,有人可以向我解释为什么这是不可能的吗?

提前致谢!

【问题讨论】:

    标签: java binary twos-complement


    【解决方案1】:

    0b10000000 是正数int 128。byte 没有直接的文字表示,只有 intlongfloatdoublecharbooleanStringnull。你需要一个演员来将它分配给byte

    byte negative128 = (byte)0b10000000;
    

    这与任何其他表示相同:

    byte a = (byte)128;
    byte b = (byte)0x80;
    

    如果从 int 编译时常量表达式(例如文字)到 byte 的转换不涉及截断(即 -128 到 127 包括在内),则该语言允许要省略的演员表。

    byte c = -128;
    

    【讨论】:

    • 引用您的第一句话,来自3.10.1. Integer Literals:“如果整数文字以 ASCII 字母 Ll (ell) 为后缀,则其类型为 long;否则它的类型为 int4.2.1)。"
    猜你喜欢
    • 2023-03-07
    • 2023-03-28
    • 1970-01-01
    • 2019-07-25
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多