Я не понимаю вывод следующего кода:
public static void main(String[] args) {
int i1, i2, i3, i4;
byte b;
i1 = 128;
b = (byte) i1;
i2 = (int) b;
i3 = 0 | b;
i4 = 1 << 7;
System.out.format("i1: %d b: %d i2: %d i3: %d i4: %d\n", i1, b, i2, i3, i4);
}
Выход:
i1: 128 b: -128 i2: -128 i3: -128 i4: 128
Поскольку byte
является 8-разрядным целым числом со знаком с добавлением двух , двоичные представления с 1 в старшем значащем бите интерпретируются как отрицательные значения, поэтому b
становится -128
с которым у меня все в порядке. Я также понимаю, что, вероятно, хорошей идеей будет сохранять согласованность интерпретации при приведении, как с i2
. Но не должны ли i3
и i4
иметь идентичные битовые комбинации и, следовательно, отображаться на идентичные int
значения?