admin管理员组

文章数量:1794759

Java 基础 —— 进制转换

Java 基础 —— 进制转换

文章目录
  • Java 基础 —— 进制转换
    • 简介
    • 转换说明
      • 10进制转换Demo
    • 算法转换
    • R进制转进制
    • 扩展:统计输入整数二进制有多少个“1”
      • 需求
    • 扩展:进制转换(输入一个十六进制数值字符串,输出该值十进制字符串)
      • 需求
      • 小结

Java 基础 —— 进制转换 简介

在Java中,进制转换已经被封装在Integer中,无论是常规的10转2、8、16,还是相应的2、8、16进制转换10进制的方法(也包含10->n进制),n进制转10进制的常规方法。

转换说明 10进制转换其它进制对应的方法参数:n —— 原10进制数据 r —— 进制返回值
10转2Integer.toBinaryString(n);2进制字符串
10转8Integer.toOctalString(n);8进制字符串
10转16Integer.toHexString(n);16进制字符串
10转rInteger.toString(100, 16);r进制字符串
10进制转换Demo
  • Demo.java
public class Demo { public static void main(String[] args) { int n = 13; Integer.toHexString(n); System.out.println(n + "的二进制是:" + Integer.toBinaryString(n)); System.out.println(n + "的八进制是:" + Integer.toOctalString(n)); System.out.println(n + "的十六进制是:" + Integer.toHexString(n)); System.out.println(n + "的三进制是:" + Integer.toString(n, 3)); } }
  • 控制台输出结果
13的二进制是:1101 13的八进制是:15 13的十六进制是:d 13的三进制是:111
  • 苹果计算器获取13的二进制
算法转换 /** * 一个char[]对象 */ private static char[] array = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); /** * 转换进制函数 * @param number 要转换的数值 * @param n 转换的进制数 * @return */ public static String myDec(int number, int n) { // String 是不可变的,每次改变都要新建一个String,很浪费时间。 // StringBuilder是‘可变的String’ 。 StringBuilder result = new StringBuilder(); // 模拟计算进制的过程 while (number > 0) { result.insert(0, array[number % n]); number /= n; } return result.toString(); } R进制转进制
  • Demo.java
public class Demo { public static void main(String[] args) { // 1+4+16==21 String s = "10101"; // 结果是21 System.out.println(Integer.parseInt(s, 2)); // Integer 中封装好的函数:parseInt // 可针对二进制中的1的个数,在竞赛中很常用 // JDK8中的实现方法使用的是 & 操作,所以比正常的遍历要快的多 System.out.println(Integer.bitCount(21)); // 上文21的二进制,所以21的二进制有3个'1' } }
  • 控制台输出
21 3
  • 苹果计算器获取21的二进制
扩展:统计输入整数二进制有多少个“1” 需求
  • 题目
/** * @description: 输入整数,显示整数转换为二进制后,其中包含多少个1,例如:输入5 ,5的二进制为101,输出2 * @mofified By: */ public static int findNumberOf1(int num) { /** 请完善此处代码 */ return 0; }
public static void main(String[] args) { // System.out.println("Test"); Scanner scan = new Scanner(System.in); while (scan.hasNext()) { int a = scan.nextInt(); System.out.println(findNumberOf1(a)); } } public static int findNumberOf1(int num) { int counter = 0; // 转为二进制字符串 String aString = Integer.toBinaryString(num); for (int i = 0; i < aString.length(); i++) { if(aString.charAt(i) == '1') { counter++; } } return counter; } 扩展:进制转换(输入一个十六进制数值字符串,输出该值十进制字符串) 需求

接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入)

  • 解法一
public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNextLine()){ String s = sc.nextLine(); // 不写进制的话,默认进制为10; int i = Integer.parseInt(s.substring(2),16); // substring(2)跳过前2个,Interger.parseInt(string s,进制 t); System.out.println(i); } }

Integer.parseInt(string str,radix 16); // 不写进制的话,默认进制为10;

  • 解法二(解法一题意可能会变形,用解法二更为恰当)
public static void main(String[] args){ Scanner sc= new Scanner(System.in); while(sc.hasNext()){ String s = new String(sc.nextLine()); // 16进制输入为字符串输入 int num = 0; // i=2,用来跳过“0x” for(int i=2; i<s.length(); i++){ if (s.charAt(i) >= 'A' && s.charAt(i) <= 'F') { num = num * 16 + s.charAt(i) - 'A' + 10; }else { num = num * 16 + +s.charAt(i) - '0'; } } System.out.println(num); } } 小结

Java中,字符串(某一进制数)转某一确定进制数。

// str:转换数值 // num:进制数 // 如果 x = Integer.parseinteger(1010);那么x=1010,因为radix无参时默认为10进制 Integer.parseInteger(String str, radix num);

本文标签: 基础java