[英]Casting an int to byte in Java
请不要将其标记为重复项。 这是完全不同的问题吗? 我已经回答过有关此域的一系列问题,之前在此网站上曾问过。
我引用赫伯特·希尔德(Herbert Schildt)的话:转换不兼容的类型-如果整数的值大于一个字节的范围,它将以模数(整数除以该整数的余数)字节范围(-128到127)为模。
现在考虑一下:字节b =(字节)246;
System.out.println("---"+246%256); //this gives 246
System.out.println("---value of b after casting an int to byte---" + b);// this gives -10
Java中的byte是带符号的,因此它的范围是-2 ^ 7到2 ^ 7-1-即-128到127。由于246在127之上,因此最终回绕到256-246 = 10。 也就是说,基本上将256(2 ^ 8)加或减,直到它落入范围。
根据赫伯特的答案是什么? 我认为应该是256-(246%256)=10。(因为246再次超出字节的范围。)但是我怎么知道它将是246-256还是256-246。 我知道可以通过实现2的补码来计算。 我需要不使用2的补码就知道这一点(只需加上或减去246-256或256-246。)
当您将int转换为byte时。 Java将int的最后8位保存为字节并抛出其他位。
byte b = (byte) (246+1024); // -10
当您需要将其打印为未标记时,请使用Byte.totoUnsignedInt()
byte b = (byte) 246;
int i = Byte.toUnsignedInt(b);
System.out.println(i);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.