繁体   English   中英

Java字节值不正确

[英]Java byte value not correct

我有这个十六进制值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 ...

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

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

10010011

由于根据Oracle文档,一个byte是: “一个8位有符号二进制补码整数” ,有符号值变为:

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

因为byte在-128:127范围内( 见这里 )。 当你调用byteValue()你无法获得该范围之外的任何内容,因此它会溢出(并从最低值开始)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM