Что такое байты Java

Итак, вчера на работе мне пришлось написать приложение для подсчета страниц в файле AFP. Итак, я отряхнул пыль со своего PDF-файла MO: DCA spec и нашел структурированное поле BPG (Begin Page) и его 3-байтовый идентификатор. Приложение должно работать в системе AIX, поэтому я решил написать это на Java.

Для максимальной эффективности я решил, что буду читать первые 6 байтов каждого структурированного поля, а затем пропускать оставшиеся байты в поле. Это даст мне:

0: Start of field byte
1-2: 2-byte length of field
3-5: 3-byte sequence identifying the type of field

Поэтому я проверяю тип поля и увеличиваю счетчик страниц, если это BPG , и не делаю, если это не так. Затем я пропускаю оставшиеся байты в поле, а не читаю их. И здесь, в пропуске (и действительно в длине поля) я обнаружил, что Java использует подписанные байты.

Я немного погуглил и нашел довольно много полезной информации. Самой полезной, конечно, была инструкция поразрядного & на 0xff , чтобы получить значение типа unsigned int. Это было необходимо для меня, чтобы получить длину, которую можно было бы использовать при вычислении количества пропущенных байтов.

Теперь я знаю, что на 128 мы начинаем отсчет в обратном порядке с -128. Что я хочу знать, так это то, как здесь работает побитовая операция - точнее, как я прихожу к двоичному представлению отрицательного числа.

Если я правильно понимаю побитовые и , ваш результат будет равен на число, в котором установлены только общие биты ваших двух чисел. Итак, если предположить, что байт b = -128 , у нас будет:

b & 0xff // 128

1000 0000-128
1111 1111 255
---------
1000 0000 128

Итак, как я могу получить 1000 0000 для -128? Как мне получить двоичное представление чего-то менее очевидного, например -72 или -64?

8
задан Brian Warshaw 2 October 2010 в 13:05
поделиться