ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【Java基础知识】进制转换

【Java基础知识】进制转换

文章目录

  • 一、进制的基本概念
  • 二、二进制与十进制的相互转换
    • 1. 十进制转二进制
    • 2. 二进制转十进制
  • 三、八进制与其他进制的转换
    • 1. 二进制与八进制的转换
      • ①二进制转八进制
      • ②八进制转二进制
    • 2. 八进制与十进制的转换
      • ①八进制转十进制
      • ②十进制转八进制
  • 四、十六进制与其他进制的转换
    • 1. 二进制与十六进制的转换
      • ①二进制转十六进制
      • ②十六进制转二进制
    • 2. 十六进制与十进制的转换
      • ①十六进制转十进制
      • ②十进制转十六进制
  • 五、Java 中进制的表示与转换
    • 1. 不同进制的表示方法
    • 2. 进制转换的 API 方法

摘要:本文系统讲解计算机中进制的基本概念与相互转换方法。首先介绍二进制、八进制、十六进制与十进制的基数及存在意义;随后详细演示二进制与十进制、八进制、十六进制之间的转换,包括按权展开求和法、除基取余法以及分组换算技巧,并配有完整计算示例;最后结合 Java 语言,说明不同进制字面量的表示方式(0b、0、0x 前缀)以及Integer.toBinaryString、Integer.toOctalString、Integer.toHexString、Integer.parseInt等内置 API 的使用。适合初学者快速掌握进制转换原理与 Java 实战应用。

一、进制的基本概念

在计算机科学中,进制是表示数字的方式,不同的进制使用不同的基数(基数指进位计数制中所使用的数字符号的个数):

  • 二进制:基数为 2,只使用 0 和 1 两个数字,逢 2 进 1(计算机底层存储的基础)
  • 八进制:基数为 8,使用 0-7 八个数字,逢 8 进 1
  • 十六进制:基数为 16,使用 0-9 和 A-F(或 a-f)十六个符号,逢 16 进 1(A=10, B=11, …, F=15)
  • 十进制:基数为 10,使用 0-9 十个数字,逢 10 进 1(人类日常使用的计数方式)

为什么需要多种进制?
  • 二进制是计算机的底层语言,计算机只有高低两种电平,只能识别 0 和 1。但纯二进制数字极长,读写、复制极易出错。
  • 八进制和十六进制是二进制的简化表示形式,能大幅缩短数字长度,每 3 位二进制对应 1 位八进制,每 4 位二进制对应 1 位十六进制,转换非常方便。
  • 进制互转无计算损耗,分组即可快速换算,大幅缩短数字长度,方便程序员阅读调试。


二、二进制与十进制的相互转换

1. 十进制转二进制

二进制的概念及十进制转二进制

2. 二进制转十进制

二进制转十进制采用按权展开求和法,即每一位数字乘以 2 的对应次方(次方从右往左,从 0 开始计数),然后将所有结果相加。

示例 1:将二进制0011转换为十进制

计算过程: 0011 (2) = 1×2⁰+1×2¹ +0×2² +0×2³ = 1×1 + 1×2 + 0 + 0 = 3(10)




三、八进制与其他进制的转换

八进制是二进制的简化形式,每 3 位二进制数对应 1 位八进制数,这使得它们之间的转换非常高效。

1. 二进制与八进制的转换

①二进制转八进制

转换步骤:

  • 将二进制数从右往左每 3 位分为一组(不足 3 位的在左边补 0)
  • 每组 3 位二进制数对应 1 位八进制数(000-111 对应 0-7)
  • 组合所有结果得到八进制数

示例:将二进制10110101转换为八进制:

分组(从右往左):10 110 101 → 补0后为 010 110 101 对应关系: 010 → 2 110 → 6 101 → 5 组合结果:265(8) 即:10110101(2) = 265(8)

②八进制转二进制

转换步骤:

  • 将八进制的每一位数字转换为对应的 3 位二进制数
  • 去除前导零(可选,根据需要保留)
  • 组合所有二进制数得到结果

示例:将八进制141转换为二进制

计算过程: 对应关系: 1(8) = 001(2) 4(8) = 100(2) 1(8) = 001(2) 组合结果:001100001(2) → 简化为1100001(2)

2. 八进制与十进制的转换

①八进制转十进制

采用按权展开法,每一位数字乘以 8 的对应次方(次方从右往左,从 0 开始计数),然后求和。

示例:将八进制141转换为十进制

计算过程: 141(8) = 1×8⁰ + 4×8¹ + 1×8² = 1×1 + 4×8 + 1×64 = 1 + 32 + 64 = 97(10)

②十进制转八进制

采用除 8 取余法,不断用 8 整除该数,记录每次的余数,直到商为 0,最后将余数从后往前排列。

示例:将十进制97转换为八进制

计算过程: 97 ÷ 8 = 12 余数 1 12 ÷ 8 = 1 余数 4 1 ÷ 8 = 0 余数 1 余数倒序排列:141 结果:97(10) = 141(8)


四、十六进制与其他进制的转换

十六进制是最常用的二进制简化形式,每 4 位二进制数对应 1 位十六进制数,广泛应用于编程领域。

1. 二进制与十六进制的转换

①二进制转十六进制

转换步骤:

  • 将二进制数从右往左每 4 位分为一组(不足 4 位的在左边补 0)
  • 每组 4 位二进制数对应 1 位十六进制数(0000-1111 对应 0-F)
  • 组合所有结果得到十六进制数

示例 :将二进制01100001转换为十六进制

分组(从右往左):0110 0001 对应关系: 0110(2) = 6(16) 0001(2) = 1(16) 组合结果:61(16)

②十六进制转二进制

转换步骤:

  • List item将十六进制的每一位数字转换为对应的 4 位二进制数
  • 去除前导零(可选,根据需要保留)
  • 组合所有二进制数得到结果

示例:将十六进制61转换为二进制

对应关系: 6(16) = 0110(2) 1(16) = 0001(2) 组合结果:01100001(2) → 简化为1100001(2)

2. 十六进制与十进制的转换

①十六进制转十进制

采用按权展开法,每一位数字乘以 16 的对应次方(次方从右往左,从 0 开始计数),然后求和。

示例 1:将十六进制 61 转换为十进制

计算过程: 61(16) = 1×16⁰ + 6×16¹ = 97(10)

示例 2:将十六进制FA转换为十进制

plaintext 计算过程: FA(16) = 10×16⁰ + 15×16¹ (F=15, A=10) = 250(10)

②十进制转十六进制

采用除 16 取余法,不断用 16 整除该数,记录每次的余数(10-15 分别用 A-F 表示),直到商为 0,最后将余数从后往前排列。

示例:将十进制250转换为十六进制

计算过程: 250 ÷ 16 = 15 余数 10 → A 15 ÷ 16 = 0 余数 15 → F 余数倒序排列:FA 结果:250(10) = FA(16)


五、Java 中进制的表示与转换

Java 程序支持直接使用二进制、八进制和十六进制表示整数,并能自动转换为十进制输出。

1. 不同进制的表示方法

在 Java 中,不同进制的数字有特定的前缀标识

  • 二进制:以0b或0B开头
  • 八进制:以0开头
  • 十六进制:以0x或0X开头

代码示例:

publicclassVariableDemo1{publicstaticvoidmain(String[]args){printVariable();}publicstaticvoidprintVariable(){//程序中可以直接写进制数据System.out.println("--------二进制转为十进制--------");inti1=0b01100001;//二进制 97System.out.println(i1);System.out.println("--------八进制转为十进制--------");inti2=0141;//八进制 97System.out.println(i1);System.out.println("--------十六进制转为十进制--------");;inti3=0x61;//十六进制 97inti4=0xFA;//十六进制 250System.out.println(i3);System.out.println(i4);}}

2. 进制转换的 API 方法

Java 提供了内置方法用于进制转换:

publicclassNumberConversion{publicstaticvoidmain(String[]args){intnum=97;// 十进制转其他进制System.out.println("十进制"+num+"转二进制: "+Integer.toBinaryString(num));// 1100001System.out.println("十进制"+num+"转八进制: "+Integer.toOctalString(num));// 141System.out.println("十进制"+num+"转十六进制: "+Integer.toHexString(num));// 61// 其他进制转十进制intfromBinary=Integer.parseInt("1100001",2);// 二进制转十进制intfromOctal=Integer.parseInt("141",8);// 八进制转十进制intfromHex=Integer.parseInt("61",16);// 十六进制转十进制System.out.println("二进制1100001转十进制: "+fromBinary);// 97System.out.println("八进制141转十进制: "+fromOctal);// 97System.out.println("十六进制61转十进制: "+fromHex);// 97}}
返回列表