jog*_*ito 17 java encoding snmp
我正在查看可以在这个位置看到的SNMPBEECodec
特别是我正在查看encodeLength()
我感兴趣的函数A片段
int numBytes = 0;
int temp = length;
while (temp > 0)
{
++numBytes;
temp = (int)Math.floor(temp / 256);
}
Run Code Online (Sandbox Code Playgroud)
(来自Drexel SNMP库).
我想知道为什么Math.floor()使用而不是像一个简单的整数除法temp/256.似乎简单的整数除法会给出相同的结果.还是有技术差异?
sle*_*ske 21
要回答您问题的技术部分:
使用math.floor()是多余的:temp / 256是一个整数(按照Java的整数运算规则),并且Math.floor()对整数使用是没有意义的.你可以简单地使用temp / 256.
如果没有阅读他们的想法,作者为什么这样做是不可能回答的.作者可能只是对Java中的划分行为感到困惑,并决定"安全地玩" - 但这只是猜测.
小智 21
好吧,不幸的是,作者再也无法读懂他的想法了 - 自从我写这篇文章已有12年了,所以我忘记了我不仅仅使用整数除法的原因.一些想法:我在其他地方使用整数除法假设通常的行为,因此它不可能是对Java中整数除法规则的基本混淆; 有可能(虽然不太可能)我在某个时候使用非整数数据类型作为参数,并且当我改变时没有摆脱多余的floor(); 或者(更有可能)我在某些时候试图在开发算法时尝试向上而不是向下,使用ceil()作为一种廉价(=更少的字符)方式来做到这一点,并且只是在我做时反射性地切换到floor()改变.
所以不幸的是,真正的原因在时间的迷雾中消失了...但我同意,地板()是多余的.我应该在Github上发布代码,以便人们可以改进和发展它.\ Jon
| 归档时间: |
|
| 查看次数: |
25928 次 |
| 最近记录: |