Там нет по модулю на самом деле. Сужение преобразования в 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
Modulo вещь является точной, если мы работаем на значениях выше или равна 256.
Дублирование? http://stackoverflow.com/questions/31674821/conversion-of-integer-to-byte-in-java – muymoo