代码之家  ›  专栏  ›  技术社区  ›  user2946696

没有java.lang.Math的二进制对数?

  •  1
  • user2946696  · 技术社区  · 10 年前

    如何不使用 Math ? 现在我有了这个 Math.log(x) / Math.log(2) 它很有用,但我不能使用 java.lang.Math .

    我能做什么?

    int bits_necessaris = (int)(log2(nat + 1)); // This is correct
    
    // The function where I'm having trouble
    
    public static int log2(int x) {
        return (something);
    }
    

    重要: 我表演的时候 Math.log(7) / Math.log(2) 我得到了 2.80XXXXX

    所以我这样做了:

    (int) Math.ceil(Math.log(7) / Math.log(2));
    

    我得到了 ceil(2.80XXXXX) = 3 .

    函数的返回值必须四舍五入,例如,如果解为6.777,则返回值必须为7。

    1 回复  |  直到 4 年前
        1
  •  3
  •   Manaus Bhargav Patel    4 年前

    您想知道表示一个整数需要多少位?然后有更简单的解决方案,例如:

    int bitsNeededFor(int i) {
        int bits = 0;
        while (i > 0) {
            bits++;
            i /= 2;
        }
        return bits;
    }
    

    仔细想想,以下内容更快更容易理解:

    int bitsNeededFor(int i) {
        return 32 - Integer.numberOfLeadingZeros(i);
    }