Почему 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
. Кажется, что простое целочисленное деление даст тот же результат. Или существует техническая разница?
Ответы
Ответ 1
Чтобы ответить на техническую часть вашего вопроса:
Использование math.floor()
является излишним: temp / 256
является целым числом (по правилам Java для целочисленной арифметики), а использование math.floor()
для целого числа бессмысленно. Вы можете просто использовать temp / 256
.
Почему автор сделал это, невозможно ответить, не читая их мысли. Возможно, автор просто смутился о поведении деления на Java и решил "безопасно играть", но это всего лишь предположение.
Ответ 2
Ну, к сожалению, автор больше не может читать его мысли - это было около 12 лет с тех пор, как я написал это, поэтому я забыл, почему я не просто использовал целочисленное деление. Некоторые мысли: я использую целочисленное деление в другом месте, предполагая обычное поведение, поэтому вряд ли это было бы основной путаницей в правилах для целочисленного деления в Java; возможно (хотя и маловероятно), что я был в какой-то момент, используя неинтегральный тип данных для аргумента, и не избавился от лишнего floor(), когда я изменился; или, возможно, (более вероятно), я в какой-то момент пытался округлить, а не вниз, развивая алгоритм, используя ceil() как дешевый (= меньше символов) способ сделать это, и просто рефлексивно переключился на пол(), когда я изменилось.
Итак, к сожалению, настоящая причина теряется в тумане времени... но я согласен, что пол() лишний. Я действительно должен опубликовать код на Github или тому подобное, чтобы люди могли улучшить и развить его. \ Джон