Я встретил недоразумение примитивного продвижения в следующем фрагменте кода.примитивное продвижение для >> [Java]
byte a = 2;
int b = a >> 4L;
Что я ожидал бы?
long b = (int)a >> 4L;
long b = a >> 4L;
int b = a >> 4L;
int >> long
будет способствовать большему типу данных (long
), и он не будет компилировать с результатом int
типа.
Что я получил?
Он компилируется в порядке. Почему?
Правила расширения не замечают двоичную операцию, только самый широкий операнд, например. 'x% (byte) b' не может быть шире, чем' byte', и все же он никогда не является 'byte' –