在Java中转换不兼容的类型

时间:2016-08-26 18:45:15

标签: java types casting int byte

在完成理论的过程中,我遇到了这条我不太了解的路线。 "如果整数值大于字节范围,则它将以模数(整数除数的余数除以)字节范围减小。"

这句话是什么意思?我知道整数范围远大于字节范围。 谁能解释一下? PS:我是编程的初学者。 感谢

2 个答案:

答案 0 :(得分:0)

模数(%)表示清洁除法后的余数。例如5 % 2 == 1

因此,如果您尝试从byte中创建int并且它大于byte的最大范围,则它将除以{的最大值{ {1}}并将余数作为byte的值。

示例:

byte

答案 1 :(得分:0)

实际上没有模数。 Java中的缩小转换会削减位(字节为8位值,整数为32位)。所以我做了一个字节转换的例子:

int[] values = new int[]{ 300, 128, -1, -129, -4097};

for(int i : values) {
    String intValue = Integer.toString(i);
    String intBinary = Integer.toBinaryString(i);
    String byteValue = Byte.toString((byte) i);
    String byteBinary = intBinary.substring(intBinary.length() - 8);

    System.out.println("==============");
    System.out.println("Int val: " + intValue);
    System.out.println("Int bin: " + intBinary);
    System.out.println("Byte val: " + byteValue);
    System.out.println("Byte bin: " + byteBinary);
}

如果您考虑模数(128是我最喜欢的),输出是非常意外的。请记住,第一位决定数字是正数还是负数,但它也是值的一部分(这就是为什么字节范围是127到-128)。

==============
Int val: 300
Int bin: 100101100
Byte val: 44
Byte bin: 00101100
==============
Int val: 128
Int bin: 10000000
Byte val: -128
Byte bin: 10000000
==============
Int val: -1
Int bin: 11111111111111111111111111111111
Byte val: -1
Byte bin: 11111111
==============
Int val: -129
Int bin: 11111111111111111111111101111111
Byte val: 127
Byte bin: 01111111
==============
Int val: -4097
Int bin: 11111111111111111110111111111111
Byte val: -1
Byte bin: 11111111

如果我们操作超过或等于256的值,则模数是准确的。