美文网首页
求一个整数转换成二进制后的位数

求一个整数转换成二进制后的位数

作者: 好学人 | 来源:发表于2019-11-18 11:01 被阅读0次

    题目描述:

    给定一个正整数n,求将n转换为二进制后有多少位?

    例如:10转换为二进制后为1010,共有4位。

    思路分析:

    根据抽象问题具体化,具体问题特殊化的思考原则,我们先列举几个例子:

    2^1 = 2 -> 10 -> 2      11->3=2^2-1
    
    2^2 = 4 -> 100 -> 3     111->7=2^3-1
    
    2^3 = 8 -> 1000 -> 4    1111->15=2^4-1
    
    2^4 = 16 -> 10000 -> 5  11111->31=2^5-1
    

    由以前例子可以总结出以下规律:

    如果一个二进制数字bx位,那么b能表示的最小值为2^(x-1),b能表示的最大值为2^x-1。即2^(x-1) ≤ b ≤ 2^x-1

    因此,我们只要计算出给定的正整数n2的多少次方即可。即y=log(2, n)

    代码实现:

    /**
     * 计算一个整数转换为二进制后有多少位
     * 比如:8转换为二进制后为1000,共有4位;
     * 31转换为二进制后为 11111,共有5位
     */
    public double getBinaryBit(int n) {
        double log2_n = Math.log(n) / Math.log(2);
        double bits = Math.floor(log2_n + 1);
        return bits;
    }
    

    总结:

    本题解法采用了抽象问题具体化,具体问题特殊化的思维方式,推导出了问题的一般规律,然后利用Java的Math.log()API 解决了问题。

    相关文章

      网友评论

          本文标题:求一个整数转换成二进制后的位数

          本文链接:https://www.haomeiwen.com/subject/dcyvictx.html