在Java中将int转换为byte

时间:2014-09-10 09:50:28

标签: 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中的

字节是有符号的,所以它的范围是-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。)

1 个答案:

答案 0 :(得分:0)

将int转换为byte。 Java将int的最后8位保存到byte并抛出其他位。

byte b = (byte) (246+1024);  // -10

当您需要将其打印为unsinged时,请使用Byte.totoUnsignedInt()

byte b = (byte) 246;
int i = Byte.toUnsignedInt(b);
System.out.println(i);