java实现:整数进制相互转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现:整数进制相互转换相关的知识,希望对你有一定的参考价值。
指定一种整数类型(byte,short,char,int),以一种进制(十进制,二进制,八进制,十六进制)形式输入一个整数,分别显示其其他进制形式,图形用户界面如图所示。
要求:运用数组。设计二进制,四进制,八进制,十六进制显示算法,各进制位数根据整数类型而定;当取值为正数或0且不足位时,高位补0,显示符号位;解决负整数的进制转换问题。
java实现:整数进制相互转换的方法:
十进制转为二进制、八进制、十六进制, 用 Integer.toXXXString()方法
(1)十进制转为二进制: Integer.toBinaryString(int i);
public static String toBinaryString(int i):以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
(2)十进制转为8进制 :Integer.toOctalString(int i);
public static String toOctalString(int i):以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。
(3)十进制转为16进制: Integer.toHexString(int i);
public static String toHexString(int i):以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
举例:
String bin = Integer.toBinaryString(10);String oct = Integer.toOctalString(10);
String hex = Integer.toHexString(10);
2.十六进制、八进制、二进制转为十进制(有两种方法):parseInt() 和valueOf()。
Integer.parseInt(String s,int radix);
public static int parseInt(String s,int radix) throws NumberFormatException使用第二个参数作为指定的基数,将字符串参数解析为有符号的整数;
Integer.valueOf(String s,int radix);
public static Integer valueOf(String s, int radix) throws NumberFormatException返回一个 Integer 对象,该对象中保存了用第二个参数提供的基数进行解析时从指定的 String 中提取的值。
举例:
tryint i = Integer.parseInt("a", 16);
//输出为10进制数10
System.out.println(i);
catch (Exception e)
e.printStackTrace();
try
//十六进制转成十进制
String hex = Integer.valueOf("FFFF",16).toString();
System.out.println(hex);
//八进制转成十进制
String oct = Integer.valueOf("12",8).toString();
System.out.println(oct);
//二进制转十进制
String bin = Integer.valueOf("0101",2).toString();
System.out.println(bin);
catch (Exception e)
e.printStackTrace();
参考技术A 如输入10进制,别的进制用
Integer.toBinaryString(int i)
或
Integer.toOctalString(int i)
或
Integer.toHexString(int i)
进行转换;别的进制转换也同样实现 参考技术B 输入后按回车就可以转换。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Convert extends JFrame
JLabel l1=new JLabel(" 十进制");
JLabel l2=new JLabel(" 二进制");
JLabel l3=new JLabel(" 八进制");
JLabel l4=new JLabel("十六进制");
JTextField t1=new JTextField(25);
JTextField t2=new JTextField(25);
JTextField t3=new JTextField(25);
JTextField t4=new JTextField(25);
JPanel p1=new JPanel();
JPanel p2=new JPanel();
public void init()
setTitle("整数进制转换");
setLayout(new FlowLayout());
add(p1);add(p2);
p1.setLayout(new GridLayout(4,1,10,10));
p2.setLayout(new GridLayout(4,1,10,10));
p1.add(l1);p2.add(t1);
p1.add(l2);p2.add(t2);
p1.add(l3);p2.add(t3);
p1.add(l4);p2.add(t4);
t1.addKeyListener(new KeyAdapter()
public void keyPressed(KeyEvent e)
int k = e.getKeyCode();
if (k == e.VK_ENTER)
int i=Integer.parseInt(t1.getText());
t2.setText(Integer.toBinaryString(i));
t3.setText(Integer.toOctalString(i));
t4.setText(Integer.toHexString(i));
);
t2.addKeyListener(new KeyAdapter()
public void keyPressed(KeyEvent e)
int k = e.getKeyCode();
if (k == e.VK_ENTER)
int i=Integer.parseInt(t2.getText(),2);
t1.setText(Integer.toString(i));
t3.setText(Integer.toOctalString(i));
t4.setText(Integer.toHexString(i));
);
t3.addKeyListener(new KeyAdapter()
public void keyPressed(KeyEvent e)
int k = e.getKeyCode();
if (k == e.VK_ENTER)
int i=Integer.parseInt(t3.getText(),8);
t2.setText(Integer.toBinaryString(i));
t1.setText(Integer.toString(i));
t4.setText(Integer.toHexString(i));
);
t4.addKeyListener(new KeyAdapter()
public void keyPressed(KeyEvent e)
int k = e.getKeyCode();
if (k == e.VK_ENTER)
int i=Integer.parseInt(t4.getText(),16);
t2.setText(Integer.toBinaryString(i));
t3.setText(Integer.toOctalString(i));
t1.setText(Integer.toString(i));
);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(260,200);
pack();
setVisible(true);
public static void main(String[] args) throws Exception
new Convert().init();
参考技术C import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class NewClass1 extends JFrame
JButton jButton1;
JLabel jLabel1;
JLabel jLabel2;
JLabel jLabel3;
JLabel jLabel4;
JTextField jTextField1;
JTextField jTextField2;
JTextField jTextField3;
JTextField jTextField4;
JButton jButton;
public NewClass1()
jButton = new JButton("点我转换");
jLabel1 = new JLabel();
jLabel2 = new JLabel();
jLabel3 = new JLabel();
jLabel4 = new JLabel();
jTextField1 = new JTextField(20);
jTextField2 = new JTextField(20);
jTextField3 = new JTextField(20);
jTextField4 = new JTextField(20);
jLabel1.setText("十进制");
jLabel2.setText("二进制");
jLabel3.setText("八进制");
jLabel4.setText("十六进制");
this.add(jLabel1);
this.add(jTextField1);
this.add(jLabel2);
this.add(jTextField2);
this.add(jLabel3);
this.add(jTextField3);
this.add(jLabel4);
this.add(jTextField4);
jButton.addActionListener(new ActionListener()
@Override
public void actionPerformed(ActionEvent e)
int i =Integer.parseInt(jTextField1.getText()) ;
jTextField2.setText(Integer.toBinaryString(i));
jTextField3.setText(Integer.toOctalString(i));
jTextField4.setText(Integer.toHexString(i));
);
this.add(jButton);
this.setLayout(new FlowLayout());
this.setBounds(200, 100, 300, 170);
this.setVisible(true);
public static void main(String[] args)
new NewClass1();
参考技术D 不会啊
带小数的十进制数字和2进制数字相互转换的逻辑
不同进制是指不同位置上数字对应的权值不同。
2进制对应的权值是以2为底的指数20,21....等
1001001转换为十进制的话是1+8+64=73
从10进制向2进制转换:
整数部分“除2取余”,小数部分“乘2取余”
乘二取整是针对十进制小数部分转换为二进制的方法,而整数部分为除二取余,具体如下:
-
将整数部分辗转相除2,将余数倒序排列,即整数部分的二进制数
-
将小数部分辗转相乘2,将乘积的个位数部分正序排列,即小数部分的二进制数
例:
将32.12转换为二进制数
整数部分:
32÷2=16余0
16÷2=8余0
8÷2=4余0
4÷2=2余0
2÷2=1余0
1÷2=0余1
将余数倒序排列,为10 0000
小数部分:
0.12×2=0.24(个位0)
0.24×2=0.48(个位0)
0.48×2=0.96(个位0)
0.96×2=1.92(后续运算只取小数部分进行,若出现个位数,则对应的二进制位数为1)
0.92×2=1.84(个位1)
0.84×2=1.68(个位1)
0.68×2=1.36(个位1)
接下来可以无限计算下去,取约数,小数部分为0.0001111
所以32.12D=10 0000.0001111
以上是关于java实现:整数进制相互转换的主要内容,如果未能解决你的问题,请参考以下文章