Что такое varInt+ и varInt-? int readVarint (int/*bool*/optimizePositive) {
unsigned char b = readByte();
int value = b & 0x7F;
if (b & 0x80) {
b = readByte();
value |= (b & 0x7F) << 7;
if (b & 0x80) {
b = readByte();
value |= (b & 0x7F) << 14;
if (b & 0x80) {
b = readByte();
value |= (b & 0x7F) << 21;
if (b & 0x80) value |= (readByte() & 0x7F) <> 1) ^ -(value & 1));
return value;
}
Есть такой код, не могу понять, как он работает. Объясните поподробнее кто может.

21 Авг 2019 в 06:20
189 +1
0
Ответы
1

Функция readVarint() используется для чтения переменной длины целого числа из потока байтов. Параметр optimizePositive указывает, оптимизировано ли число для положительных значений.

Алгоритм работы функции следующий:

Считывается байт из потока и сохраняется в переменной b.Младшие 7 битов байта b сохраняются в переменную value.Если старший бит байта b равен 1, это означает, что число состоит из нескольких байтов. В этом случае последовательно считываются остальные байты, и их значения добавляются к переменной value с учетом их положения.Если optimizePositive равно false, то происходит обратное преобразование для получения отрицательных чисел.

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

20 Апр 2024 в 13:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир