Это не столько вопрос языка, сколько виртуальной машины - вот почему он определен в Спецификации виртуальной машины Java, но не в Спецификации языка Java.
Фактически, результаты этих поразрядных вычислений не зависят от порядка байтов. Предположим, что с прямым порядком байтов:
int value = 4111; // 0x0000100F
int lastByte = value & 0xFF; // & 0x000000FF
// = 0x0000000F
Или Little-Endian:
int value = 4111; // 0xF0010000
int lastByte = value & 0xFF; // & 0xFF000000
// = 0xF0000000
В обоих случаях результат одинаков (в любой из обеих форм).
Теперь можно было бы спорить о том, что 0x0000000F
означает 15
, что подразумевает прямой порядок байтов. Это, по крайней мере, неявно определено в определении лексической структуры в Раздел 3.10.1 JLS, Целочисленные литералы:
Наибольшие положительные шестнадцатеричные, восьмеричные и двоичные литералы типа int, каждый из которых представляет десятичное значение 2147483647 (2 ^ 31-1), соответственно:
- 0x7fff_ffff,
- 0177_7777_7777, и
- 0b0111_1111_1111_1111_1111_1111_1111_1111
Кроме того, порядок следования байтов в основном важен для хранения и передачи данных, но это не языковые аспекты и облегчается такими вещами, как ByteOrder или на уровне API, как в метод DataOutputStream :: writeInt:
Записывает int в базовый выходной поток как четыре байта, сначала старший байт.
Единственная часть, в которой порядок байтов может влиять на семантику языка, - это операции сдвига. Но даже здесь это в основном вопрос интерпретации языка. Раздел 15.19 JLS об операторах сдвига утверждает:
Значение n ‹< s - это s битовых позиций, сдвинутых влево; это эквивалентно (даже если происходит переполнение) умножению на два в степени s.
Значение n ›› s представляет собой s битовых позиций, сдвинутых вправо с расширением знака. Результирующее значение составляет [n / 2s]. Для неотрицательных значений n это эквивалентно усечению целочисленного деления, вычисляемому оператором целочисленного деления /, на два до степени s.
В спецификации здесь указано, что существующие биты сдвигаются влево, и в то же время эта левая позиция является более значимой (однако можно также сказать, что <<
означает сдвиг вправо в мире Little-Endian ...)
person
Marco13
schedule
23.05.2014
Color.rgba()
-подобными методами). @HotLicks, поэтому я поставил туда предложение OR. - person TWiStErRob   schedule 23.05.2014