十进制转换为二进制并输出,本文仅讨论整数部分
方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一
直持续下去,直到商为0为止;最后读数时候,从最后一个余数读起,一直到最前面的一个余数。
下面举例:
例:将十进制的168转换为二进制
得出结果 将十进制的168转换为二进制,(10101000)2
分析:
第一步,将168除以2,商84,余数为0。
第二步,将商84除以2,商42余数为0。
第三步,将商42除以2,商21余数为0。
第四步,将商21除以2,商10余数为1。
第五步,将商10除以2,商5余数为0。
第六步,将商5除以2,商2余数为1。
第七步,将商2除以2,商1余数为0。
第八步,将商1除以2,商0余数为1。
第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位;
读数字从最后的余数向前读,即1010100;算法如下:
package binary;
import java.util.Scanner;
/**
* 十进制转换为2进制并输出
* @author Administrator
*
*/
public class IntegerToBinary
{
private static StringBuilder mode;//存放二进制结果
private int middle;//存放递归过程中的10进制数值
public IntegerToBinary()
{
mode=new StringBuilder();
middle=0;
}
public static void main(String[] args)
{
IntegerToBinary to=new IntegerToBinary();
Scanner scan=new Scanner(System.in);
while(scan.hasNextInt())
{
System.out.println(to.toBinaryString(scan.nextInt()));
mode.delete(0, mode.length());//清空StringBuilder
}
}
/**
* 返回10进制整数转换得到的2进制字符串
* 如整数5,得到二进制的"101"
* @param i 需要转换为2进制的10进制整数
* @return
*/
public String toBinaryString(int i)
{
this.toBinary(i);
return mode.toString();
}
/**
* 辗转相除,并对余数由最后得到1位余数向前进行拼接
* @param i
*/
public void toBinary(int i)
{
if(i>=1)
{
middle=i/2;
this.toBinary(middle);//递归
mode.append(i%2);
}
}
}