18

我正在查看可以在此位置
看到的 SNMPBEECodec 特别是我正在查看encodeLength()
我感兴趣的功能片段

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

(来自Drexel SNMP 库)。

我想知道为什么Math.floor()使用它而不是像temp/256. 似乎简单的整数除法会给出相同的结果。还是有技术差异?

4

2 回答 2

22

要回答您问题的技术部分:

使用math.floor()是多余的:temp / 256是一个整数(根据 Java 的整数算术规则),Math.floor()对整数使用是没有意义的。你可以简单地使用temp / 256.

如果不阅读他们的想法,就无法回答作者为什么这样做。作者可能只是对 Java 中的除法行为感到困惑,并决定“谨慎行事”——但这只是猜测。

于 2013-01-22T15:11:48.530 回答
22

好吧,不幸的是,作者也无法读懂他的想法——我写这篇文章已经有 12 年了,所以我忘记了我不只使用整数除法的原因。一些想法:假设通常的行为,我在其他地方使用整数除法,所以它不太可能对 Java 中的整数除法规则产生基本的混淆;有可能(尽管不太可能)我在某个时候使用非整数数据类型作为参数,并且在我更改时没有摆脱多余的 floor() ;或者也许(更有可能)我在开发算法时尝试向上而不是向下取整,使用 ceil() 作为一种廉价(= 更少字符)的方式来做到这一点,并且当我反射性地切换到 floor()改变了。

所以不幸的是,真正的原因在时间的迷雾中消失了……但我同意, floor() 是多余的。我真的应该在 Github 等上发布代码,以便人们可以改进和发展它。\乔恩

于 2013-01-26T16:09:43.823 回答