【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}}