我正在查看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
这样的简单整数除法。似乎简单的整数除法会给出相同的结果。或者是否存在技术差异?
答案 0 :(得分:21)
回答问题的技术部分:
使用math.floor()
是多余的:temp / 256
是一个整数(按照Java的整数运算规则),并且对整数使用Math.floor()
是没有意义的。您只需使用temp / 256
。
为什么作者这样做是不可能不回答他们的想法回答。作者可能只是对Java中的划分行为感到困惑,并决定“安全地玩” - 但这只是猜测。
答案 1 :(得分:20)
嗯,不幸的是,作者再也无法读懂他的想法了 - 自从我写这篇文章已有12年了,所以我忘记了我不仅仅使用整数除法的原因。一些想法:我在其他地方使用整数除法假设通常的行为,因此它不可能是对Java中整数除法规则的基本混淆;有可能(虽然不太可能)我在某个时候使用非整数数据类型作为参数,并且当我改变时没有摆脱多余的floor();或者(更有可能)我在某些时候试图在开发算法时尝试向上而不是向下,使用ceil()作为一种廉价(=更少的字符)方式来做到这一点,并且只是反射性地切换到floor()当我改变。
所以不幸的是,真正的原因在时间的迷雾中消失了......但我同意,地板()是多余的。我应该在Github上发布代码,以便人们可以改进和发展它。 \ 乔恩