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 中提取的值。

举例:

try
      int 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取余”

 

乘二取整是针对十进制小数部分转换为二进制的方法,而整数部分为除二取余,具体如下:

  1. 将整数部分辗转相除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实现:整数进制相互转换的主要内容,如果未能解决你的问题,请参考以下文章

带小数的十进制数字和2进制数字相互转换的逻辑

Java十进制与其他进制相互转换

Java十进制与其他进制相互转换

PHP进制转换[实现28163664进制至10进制相互转换]

进制转换之非十进制数之间相互转换

Python 含小数的十二进制相互转换问题