在完成理论的过程中,我遇到了这条我不太了解的路线。 "如果整数值大于字节范围,则它将以模数(整数除数的余数除以)字节范围减小。"
这句话是什么意思?我知道整数范围远大于字节范围。 谁能解释一下? PS:我是编程的初学者。 感谢
答案 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的值,则模数是准确的。