二进制、八进制、十进制、十六进制如何互相转换?谁有教程啊 二进制,八进制,十进制,十六进制之间是怎么转换的
一。进制概念
1。 十进制
十进制使用十个数字(0、1、2、3、4、5、6、7、8、9)记数,基数为10,逢十进一。
历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算。设计十进制机器比设计二进制机器复杂得多。而自然界具有两种稳定状态的组件普遍存在,如开关的开和关,电路的通和断,电压的高和低等,非常适合表示计算机中的数。设计过程简单,可靠性高。因此,现在改为二进制计算机。
2。 二进制
二进制以2为基数,只用0和1两个数字表示数,逢2进一。
二进制与遵循十进制数遵循一样的运算规则,但显得比十进制更简单。例如:
(1)加法:0+0=0 0+1=1 1+0=1 1+1=0
(2)减法:0-0=0 1-1=01-0=1 0-1=1
(3)乘法:0*0=0 0*1=01*0=0 1*1=1
(4)除法:0/1=0 1/1=1,除数不能为0
3。 八进制
所谓八进制,就是其基数为8,基数值可以取0、1、2、3、4、5、6、7共8个值,逢八进一。
八进制与十进制运算规则一样。那么为什么要用八进制呢?难道要设计八进制的计算机么?实际上,八进制与十六进制的引用,主要是为了书写和表示方便,因为二进制表示位数比较长。如:(1024)10 用二进制表示为 (10000000000)2,共有11个数字,用八进制表示为(2000)8。更重要的是,由于二进制与八进制存在在一种对等关系,每三位二进制与一位八进制数完全对等(23=8)。所以二进制和十进制在运算上无区别,而时进制不具备这一优点。
4。 十六进制
十六进制应用也是非常广泛的一种计数制。在使用者看来,十六进制是二进制数的一种更加紧凑的一种表示方法。
基数为:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,逢十进一。在十六进制系统中,数值为10到15的数分别用A、B、C、D、E、F表示。
二进制数及与之等值的八进制、十进制和十六进制数
二进制 八进制 十进制 十六进制
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 A
1011 13 11 B
1100 14 12 C
1101 15 13 D
1110 16 14 E
1111 17 15 F
二。进制转换
1。二进制与十进制数间的转换
(1)二进制转换为十进制
将每个二进制数按权展开后求和即可。请看例题:
把二进制数(101.101)2=1*22+0*21+1*20+1*2-1+0*2-2+1*2-3=(5.625)10
(2)十进制转换为二进制
一般需要将十进制数的整数部分与小数部分分开处理。
整数部分计算方法:除2取余法请看例题:
十进制数(53)10的二进制值为(110101)2
小数部分计算方法:乘2取整法,即每一步将十进制小数部分乘以2,所得积的小数点左边的数字(0或1)作为二进制表示法中的数字,第一次乘法所得的整数部分为最高位。请看例题:
将(0.5125)10转换成二进制。(0.5125)10=(0.101)2
2。 八进制、十六进制与十六进制间的转换
八进制、十六进制与十六进制之间的转换方法与二进制,同十进制之间的转换方法类似。例如:
(73)8=7*81+3=(59)10
(0.56)8=5*8-1+6*8-2=(0.71875)10
(12A)16=1*162+2*161+A*160=(298)10
(0.3C8)16=3*16-1+12*16-2+8*16-3=(0.142578125)10
十进制整数→→→→→八进制方法:“除8取余”
十进制整数→→→→→十六进制方法:“除16取余” 例如:
(171)10=(253)8
(2653)10=(A5D)16
十进制小数→→→→→八进制小数 方法:“乘8取整”
十进制小数→→→→→十六进制小数方法:“乘16取整”例如:
(0。71875)10=(0.56)8
(0.142578125)10=(0.3C8)16
3.非十进制数之间的转换
(1)二进制数与八进制数之间的转换
转换方法是:以小数点为界,分别向左右每三位二进制数合成一位八进制数,或每一位八进制数展成三位二进制数,不足三位者补0。例如:
(423。45)8=(100 010 011.100 101)2
(1001001.1101)2=(001 001 001.110 100)2=(111.64)8
2。二进制与十六进制转换
转换方法:以小数点为界,分别向左右每四位二进制合成一位十六进制数,或每一位十六进制数展成四位二进制数,不足四位者补0。例如:
(ABCD。EF)16=(1010 1011 1100 1101.1110 1111)2
(101101101001011.01101)2=(0101 1011 0100 1011.0110 1000)2=(5B4B。68)16
二进制与十进制之间的转换
1
十进制转二进制
方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。
(具体用法如下图)
2
二进制转十进制
方法为:把二进制数按权展开、相加即得十进制数。
(具体用法如下图)
END
二进制与八进制之间的转换
1
二进制转八进制
方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。
(具体用法如下图)
2
八进制转成二进制
方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。
(具体用法如下图)
END
二进制与十六进制之间的转换
1
二进制转十六进制
方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
(具体用法如下图)
2
十六进制转二进制
方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。
(具体用法如下图)
END
十进制与八进制与十六进制之间的转换
十进制转八进制或者十六进制有两种方法
第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。这里不再做图片用法解释。
第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。
(具体用法如下图)
八进制或者十六进制转成十进制
方法为:把八进制、十六进制数按权展开、相加即得十进制数。
(具体用法如下图)
二进制 八进制
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
有了这张表,就可以方便的把二进制数转换成八进制数。
首先,将一个二进制数自右向左每三位分成一段。
然后,将每一段用表中的八进制数替换,即可
例如:100101010
把它分成100 101 010
查表:100->4 101->5 010->2
替换:452
完成
将二进制转换成十六进制也要用到表
二进制 十六进制
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
转换方法与八进制类似,只是要将二进制数每四位分成一段
十进制与二进制的转换则比较麻烦
十进制->二进制:
用短除法将数字连续除以二,将余数由下向上排列起来,即可
二进制->十进制:
将每一位数字乘以2的(位数减一)次方,然后加起来即可
如100110:1*pow(2,5)+1*pow(2,2)+1*pow(2,1)=38
//这是我以前写的。。你看下吧。。
其他进制转换成10进制很简单。
//--------------------------------
例如 2进制转换为10进制 110
第一位数 0*1 第二位数1*2 第三位数1*4
0+2+4=6;
//---------------------------------
例如 8进制转换为10进制 776
第一位数 6*1 第二位数7*8 第三位数7*64
6+56+448=510
//---------------------------------
例如 16进制转换为10进制 776
第一位数 6*1 第二位数7*16 第三位数7*256
6+112+1792=1910
思路是这样的。。。。
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class 进制转换 extends JFrame implements ActionListener, ItemListener {
JComboBox a;
JTextField zhuanhuan, xianshi;
JButton anniu;
Container container = getContentPane();
int zz = 0;
public 进制转换() {
container.setLayout(new FlowLayout());
a = new JComboBox();
a.addItem("10进制转换为2进制");
a.addItem("10进制转换为8进制");
a.addItem("10进制转换为16进制");
a.addItem("2进制转换为8进制");
a.addItem("2进制转换为10进制");
a.addItem("2进制转换为16进制");
a.addItem("8进制转换为2进制");
a.addItem("8进制转换为10进制");
a.addItem("8进制转换为16进制");
a.addItem("16进制转换为2进制");
a.addItem("16进制转换为8进制");
a.addItem("16进制转换为10进制");
container.add(a);
zhuanhuan = new JTextField(10);
container.add(zhuanhuan);
xianshi = new JTextField(15);
xianshi.setEditable(false);
container.add(xianshi);
anniu = new JButton("转换");
container.add(anniu);
anniu.addActionListener(this);
a.addItemListener(this);
setSize(190, 150);
setVisible(true);
}
public static void main(String[] arge) {
进制转换 s = new 进制转换();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
if (a.getSelectedItem().equals("10进制转换为2进制"))
zz = 1;
if (a.getSelectedItem().equals("10进制转换为8进制"))
zz = 2;
if (a.getSelectedItem().equals("10进制转换为16进制"))
zz = 3;
if (a.getSelectedItem().equals("2进制转换为8进制"))
zz = 4;
if (a.getSelectedItem().equals("2进制转换为10进制"))
zz = 5;
if (a.getSelectedItem().equals("2进制转换为16进制"))
zz = 6;
if (a.getSelectedItem().equals("8进制转换为2进制"))
zz = 7;
if (a.getSelectedItem().equals("8进制转换为10进制"))
zz = 8;
if (a.getSelectedItem().equals("8进制转换为16进制"))
zz = 9;
if (a.getSelectedItem().equals("16进制转换为2进制"))
zz = 10;
if (a.getSelectedItem().equals("16进制转换为8进制"))
zz = 11;
if (a.getSelectedItem().equals("16进制转换为10进制"))
zz = 12;
}
}
public void actionPerformed(ActionEvent e) {
try{
if (zz == 1||zz == 0)
xianshi.setText(Integer.toBinaryString(Integer.parseInt(zhuanhuan.getText())));
else if (zz == 2)
xianshi.setText(Integer.toOctalString(Integer.parseInt(zhuanhuan
.getText())));
else if (zz == 3)
xianshi.setText(Integer.toHexString(Integer.parseInt(zhuanhuan
.getText())));
}
catch(NumberFormatException nu)
{
JOptionPane.showMessageDialog(null, "你输入非数字");
}
if (zz == 4) {
int a = j1(zhuanhuan.getText(), "[0-1]+", 2);
xianshi.setText(Integer.toOctalString(a));
} else if (zz == 5) {
j1(zhuanhuan.getText(), "[0-1]+", 2);
} else if (zz == 6) {
int a = j1(zhuanhuan.getText(), "[0-1]+", 2);
xianshi.setText(Integer.toHexString(a));
} else if (zz == 7) {
int a = j1(zhuanhuan.getText(), "[0-7]+", 8);
xianshi.setText(Integer.toBinaryString(a));
} else if (zz == 8) {
j1(zhuanhuan.getText(), "[0-7]+", 8);
} else if (zz == 9) {
int a = j1(zhuanhuan.getText(), "[0-7]+", 8);
xianshi.setText(Integer.toHexString(a));
} else if (zz == 10) {
int a = j1(zhuanhuan.getText(), "[0-9,a,b,c,d,e,f]+", 16);
xianshi.setText(Integer.toBinaryString(a));
} else if (zz == 11) {
int a = j1(zhuanhuan.getText(), "[0-9,a,b,c,d,e,f]+", 16);
xianshi.setText(Integer.toOctalString(a));
} else if (zz == 12) {
j1(zhuanhuan.getText(), "[0-9,a,b,c,d,e,f]+", 16);
}
}
public int j1(String zhuanhuan, String a1, int a3) {
if (zhuanhuan.matches(a1)) {
int bb, gg = 0, cc = 1;
String s = zhuanhuan;
StringBuffer ss = new StringBuffer(s);
ss.reverse();
for (int i = 0; i < ss.length(); i++) {
String jj = ss.charAt(i) + "";
if(a3==16){
if (jj.equals("a"))
jj = "10";
if (jj.equals("b"))
jj = "11";
if (jj.equals("c"))
jj = "12";
if (jj.equals("d"))
jj = "13";
if (jj.equals("e"))
jj = "14";
if (jj.equals("f"))
jj = "15";
}
bb = Integer.parseInt(jj);
if (i == 0)
gg += bb * cc;
else
gg += bb * (cc *= a3);
}
xianshi.setText(gg + "");
return gg;
}
else{
JOptionPane.showMessageDialog(null, "请检查输入数字是不是符合要求");
}
return 0;
}
}
用十进制的转化成其他进制的很简单,只要用这个十进制数除以它,得到余数,每除一次得到一个余数,直到不够除,把余数从下到上排列得到的就是所求,比如十进制125转化成二进制,就用125除以2,依次得62余1,62除以2,得31余0,31除以2,得15余1,15除以2,得7余1,7除以2,得3余1,3除以2,得1余1,1不够除,就写在后面.反排成一列数.得二进制111101.其他进制类似算.至于其他进制转换比较复杂,鉴于楼主很抠不给分,所以也不便详细描述,描述也不一定看的懂```小算一下拿两分闪人.````
java中自带有将十进制转化成二进制、八进制、十六进制的方法:
toBinaryString()将十进制转换成二进制
toHexString()将十进制转换成十六进制
toOctalString()将十进制转换成八进制
下面是自己写的一个将二进制转换成十进制的代码,你可以看看,自己摸索摸索
import javax.swing.JOptionPane;
public class binaryswitch
{
public static void main(String[] args)
{
String input = JOptionPane.showInputDialog("Please enter a binary number:");
char[] num_c = new char[input.length()];
for (int i=0; i<input.length(); i++)
{
num_c[i] = input.charAt(i);
if((num_c[i]!='1')&&(num_c[i]!='0'))
{
JOptionPane.showMessageDialog(null,"Your input is wrong!",
"Format Check",JOptionPane.INFORMATION_MESSAGE);
return;
}
}
System.out.println("OK");
double sum=0;
int[] num_i = new int[input.length()];
for (int i=0; i<input.length(); i++)
{
num_i[i]=input.charAt(i)-48;
sum += num_i[i] * (Math.pow(2,((input.length()-1)-i)));
}
System.out.println(sum);
System.exit(0);
}
}
视频你可以看看孙鑫的:www.sunxin.org
C语言可以直接转的,没有,可以直接用的
你用C语言做一个函数给Java用就可以了
这在C语言里一句话的事
这是数学问题,和程序类型无关 C最简单