目录:
要求十进制转二进制,首先我们想到的是除2求余法,比如数字15,如下,不断的除以2,一直到0为止,最后将余数倒序排列就是该数的二进制表示
15/2 = 7 --------余1 7/2 = 3 --------余1 3/2 = 1 --------余1 1/2 = 0 --------余1
所以15的二进制表示就是1111,再举一例,520的二进制表示
520/2 = 260 -------余0 260/2 = 130 -------余0 130/2 = 65 --------余0 65/2 = 32 --------余1 32/2 = 16 --------余0 16/2 = 8 --------余0 8/2 = 4 --------余0 4/2 = 2 --------余0 2/2 = 1 --------余0 1/2 = 0 --------余1
余数倒序排列就是1000001000,所以520的二进制表示就是1000001000,那么把上述的算法用作代码写出来是怎么样的呢?
第一个版本
Java代码将上述过程表达出来如下
public static String toBinary(int i){ StringBuilder sb = new StringBuilder(); while (i > 0){ //i%2求余 比如15%2=1 sb.append(i % 2); //求余之后除以2再赋值给i //注意,i是整型,所以小数会抹去,比如15/2=7,而不是7.5 i = i / 2; } //将最后的结果逆序后再返回 return sb.reverse().toString(); }
验证一下
System.out.println(toBinary(520));//我们自己写的 System.out.println(Integer.toBinaryString(520));//JDK自带的
看看结果,输出是一样的说明验证通过
但是对于追求极致性能的我们来说并不满足上面的转换,因为求余操作符%的性能并没有位运算高,所以我们改成位运算,所以就出现了下面的第二个版本
第二个版本
第二个版本主要引入位运算为后面JDK的实现做好基础。
public static St