繁体   English   中英

在Java中将int转换为byte

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

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