问题描述
思考题如果不使用 Java 语言自带的 BigInteger,我们还有什么方法来实现十进制到二进制的转换呢?
问题分析
- 假如这个数是17,我要怎么获取到它的二进制数?
- 17的二进制数是16+1完成的,也就是10001,如果我向右移动4位得到的数就是1(逻辑右移,17除以2的四次方,向下取整就是结果)
- 同理我向右移动三位,得到的有两位10,这个时候再与1得到最低位的就是0,也就是第二位是0.(有的人可能会问,为什么这个时候要与一个1勒,因为我们只需要最低位的值,与1也就是最后一位是1其他位全是0,与操作后,如果最后一位是1那么得到的就是1,其他的就是0)
- 同样的我再移动两位获得最低位的哪一个,17除以2的2次方,得到4,100,与1,得到0
- 右移一位除以2的一次方,得到8,2^4,10000 ,与1得到0
- 右移0位,直接与1,获得最低位,得到1
- 于是得到10001
程序解决
1
2
3
4
5
6
7
8
9
10
11public 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();
}
没有去管负数情况,可以判断一下