一、二进制数转换成十进制数
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。
二、十进制数转换为二进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
下面是简单的代码
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。
二、十进制数转换为二进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
下面是简单的代码
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigInteger;
import javax.swing.*;
public class DecimalToBin extends JFrame implements ActionListener {
JPanel panel = new JPanel();
JLabel l1 = new JLabel("请输入十进制数");
JTextField t1 = new JTextField(20);
JButton but = new JButton("转换为二进制");
JTextField t2 = new JTextField(20);
public DecimalToBin() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
// setLayout(new FlowLayout());
panel.add(l1);
panel.add(t1);
panel.add(but);
panel.add(t2);
add(BorderLayout.CENTER, panel);
but.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String str1;
str1 = t1.getText();
// int
double a = 0;
try {
a = Double.parseDouble(str1);
} catch (Exception v) {
t2.setText("Data Error! Please input one number.");
return;
}
if (a == (int) a) {
int b = (int) a;
if (b >= 0) {
BigInteger src = new BigInteger(Integer.toString(b));
// int tep=src;
// System.out.println(src + "hello");
// t2.setText(src.toString(2));
t2.setText("0" + Integer.toString(b, 2));
} else {
int c = -b;
String temp = Integer.toString(b, 2);
char[] charArray = temp.toCharArray();
for (int i = 0; i < charArray.length; i++) {
if (charArray[i] == '1')
charArray[i] = '0';
else
charArray[i] = '1';
}
int last = charArray.length - 1;
for (int i = 0; i < charArray.length; i++) {
if (charArray[last] == '0') {
charArray[last] = '1';
break;
} else {
charArray[last] = '0';
last--;
}
}
t2.setText(new String(charArray));
}
} else {
int b = (int) a;
// BigInteger src = new BigInteger(Integer.toString(b));
String result = Integer.toString(b, 2);
double c;
c = a - b;
result = result + ".";
for (int i = 0; i <= 10; i++) {
if (2 * c >= 1) {
c = 2 * c - 1;
result = result + "1";
} else {
result = result + "0";
c = 2 * c;
}
}
t2.setText(result);
}
}
public static void main(String args[]) {
DecimalToBin mainFrame = new DecimalToBin();
mainFrame.setSize(400, 200);
mainFrame.setTitle("十进制数转换为二进制数");
mainFrame.setVisible(true);
}
}