转换字节数据类型

时间:2018-05-26 14:33:44

标签: java byte

请解释下面的代码是如何工作的,因为我们知道java中的字节数据类型允许的范围是-128到127.

我的代码段是:

public class DataTypes {

public static void main(String args[]){
byte b = (byte)140;
System.out.println(b);
   }
}

输出:-116

4 个答案:

答案 0 :(得分:0)

字节在其内存空间中将有8位。使用此空间可以容纳256个值。这将从-128到127,包括0.为了支持此跨越,将使用two's compliment method以二进制格式表示字节值。 MSB( M ost S 明显 B 它)将确定符号(0 - 正& 1 - 负值)。

如果我们考虑140的情况,我们会清楚地表示140是否为1000 1100二进制格式。请记住,MSB将确定该符号,1表示该数字为负值,0表示该值为正值。在这种情况下,我们有1使其成为负数。

如果我们对这两个赞美应用逆向处理,我们首先会将0111 0011反转为10 s 01。然后通过添加1,我们得到0111 0100,其等于十进制格式的116。但MSB表示它是负值,因此-116

答案 1 :(得分:0)

也许这有助于解释。最高位确定变量的符号(正或负)。由于Java没有明确的' unsigned'你能做的最好的整数就是应用'按位'在显示之前对项目进行操作会强制它被视为未签名的......或者您可以使用它本身未签名的十六进制格式来显示它。

public class DataTypes {

   public static void main(String args[]){
      byte b = (byte)140;
      System.out.println("hex value = "+String.format("0x%02X",b)+"\n");
      System.out.println("dec value = "+String.format("%d",(b & 0xff))+"\n");
   }
}

的结果
hex value = 0x8C

dec value = 140

答案 2 :(得分:0)

140是int。根据{{​​3}},它会转换为byte,如下所示:

  

将有符号整数缩小转换为整数类型T只会丢弃除n个最低位之外的所有位

值为140的int的最低8位是10001100,这是该字节的正确值,但由于其最高位(符号位)为1,因此为负。

答案 3 :(得分:0)

我认为,当你将整数(140)转换为byte时,整数值转换为无符号字节,然后b变量值转换为有符号字节。数字140被视为无符号值,因为该数字没有符号值指示符(+或 - )

关于无符号字节的注释(正确的值是左值的表示(在文件字节中)): 0-127 = 0-127 (-128) - (-1)= 128 - 255