Подтвердить что ты не робот

Почему Math.floor() используется вместо целочисленного деления в BER Codec

Я смотрю на SNMPBEECodec, который можно увидеть на этом location
В частности, я смотрю на функцию encodeLength()
Меня интересует фрагмент

        int numBytes = 0;
        int temp = length;
        while (temp > 0)
        {
            ++numBytes;
            temp = (int)Math.floor(temp / 256);
        }   

(из Drexel SNMP library).

Я хотел бы знать, почему Math.floor() используется вместо простого простого целочисленного деления, такого как temp/256. Кажется, что простое целочисленное деление даст тот же результат. Или существует техническая разница?

4b9b3361

Ответ 1

Чтобы ответить на техническую часть вашего вопроса:

Использование math.floor() является излишним: temp / 256 является целым числом (по правилам Java для целочисленной арифметики), а использование math.floor() для целого числа бессмысленно. Вы можете просто использовать temp / 256.

Почему автор сделал это, невозможно ответить, не читая их мысли. Возможно, автор просто смутился о поведении деления на Java и решил "безопасно играть", но это всего лишь предположение.

Ответ 2

Ну, к сожалению, автор больше не может читать его мысли - это было около 12 лет с тех пор, как я написал это, поэтому я забыл, почему я не просто использовал целочисленное деление. Некоторые мысли: я использую целочисленное деление в другом месте, предполагая обычное поведение, поэтому вряд ли это было бы основной путаницей в правилах для целочисленного деления в Java; возможно (хотя и маловероятно), что я был в какой-то момент, используя неинтегральный тип данных для аргумента, и не избавился от лишнего floor(), когда я изменился; или, возможно, (более вероятно), я в какой-то момент пытался округлить, а не вниз, развивая алгоритм, используя ceil() как дешевый (= меньше символов) способ сделать это, и просто рефлексивно переключился на пол(), когда я изменилось.

Итак, к сожалению, настоящая причина теряется в тумане времени... но я согласен, что пол() лишний. Я действительно должен опубликовать код на Github или тому подобное, чтобы люди могли улучшить и развить его. \ Джон