有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java字节值不正确

我有这个十六进制值93,十进制值应该是147。因为这个数字小于255,所以可以用一个字节表示

在java中,我做到了这一点

System.out.println((new Integer(1)).byteValue()); //prints 1
System.out.println((new Integer(147)).byteValue()); //prints -109!!! WHY?

我不明白什么?整数为147,而不是打印147,它打印-109


共 (2) 个答案

  1. # 1 楼答案

    因为字节在-128:127(see here)范围内。当您调用byteValue()时,无法得到超出该范围的任何内容,因此它会溢出(并从最低值开始)

  2. # 2 楼答案

    Java中的byte有符号的,因此它表示-128到127范围内的值,而其他语言中的无符号替代值在0到255范围内。Java的所有整数类型都是有符号的,不包括char,因为它用于保存0到65535之间的16位Unicode值

    存储为字节的值147用二进制表示为:

    10010011
    

    因为根据Oracle文档,abyte是:“一个8位有符号的二的补码整数”,所以有符号值变成:

    = -2^7 + 2^4 + 2^1 + 2^0
    = -128 + 16 + 2 + 1
    = -109