[英]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.