Предполагая, что используется байтовый код и что вам нужен только знак, т. Е. Ваш вывод равен -1 или 0:
long my_value = buffer[1] & 0x80 ? -1 : 0
Я чувствую потребность в графике ASCII, чтобы улучшить понимание вышеизложенного. Вот как я предположил, что биты пронумерованы внутри buffer
:
6666555555555544<b>4</b>44444443333333333222222222211111111110000000000 (tens)
3210987654321098<b>7</b>65432109876543210987654321098765432109876543210 (ones)
[000000][111111][222222][333333][444444][555555][666666][777777] (bytes)
Итак, если вы читаете по вертикали через две верхние строки (десятки и единицы), в столбце, который образует «47» (выделено жирным шрифтом), вы попадаете в левую скобку для байта с индексом 2. Поскольку скобки отмечают наиболее и младшие значащие биты, это означает, что вы попали в MSB байта по индексу 2. Этот бит имеет индекс 7 внутри байта, что означает, что его маска равна 1 << 7, или 128, или 0x80. </p>
Таким образом, бит проверяется с выражением buffer[2] & 0x80
.