十进制到二进制的转换

问题描述

思考题如果不使用 Java 语言自带的 BigInteger,我们还有什么方法来实现十进制到二进制的转换呢?

问题分析

  1. 假如这个数是17,我要怎么获取到它的二进制数?
  2. 17的二进制数是16+1完成的,也就是10001,如果我向右移动4位得到的数就是1(逻辑右移,17除以2的四次方,向下取整就是结果)
  3. 同理我向右移动三位,得到的有两位10,这个时候再与1得到最低位的就是0,也就是第二位是0.(有的人可能会问,为什么这个时候要与一个1勒,因为我们只需要最低位的值,与1也就是最后一位是1其他位全是0,与操作后,如果最后一位是1那么得到的就是1,其他的就是0)
  4. 同样的我再移动两位获得最低位的哪一个,17除以2的2次方,得到4,100,与1,得到0
  5. 右移一位除以2的一次方,得到8,2^4,10000 ,与1得到0
  6. 右移0位,直接与1,获得最低位,得到1
  7. 于是得到10001

    程序解决

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static String decimalToBinary(int decimal) {
    StringBuilder sb = new StringBuilder();
    for (int i = 31; i >= 0; i--) {
    int temp = decimal >>> i;
    if (temp > 0) {
    int lastNum = temp&1;
    sb.append(lastNum);
    }
    }
    return sb.toString();
    }

没有去管负数情况,可以判断一下

0%