在计算机编程中,进制数是数据表示的基础,Java作为广泛使用的编程语言,支持多种进制数的表示与转换,掌握这些方法对处理底层操作、数据解析等场景至关重要。

进制数的基本概念
进制数是按位计数的方法,核心在于“基”与“权”,基指该进制允许使用的数字个数,如十进制基为10(0-9),二进制基为2(0-1),八进制基为8(0-7),十六进制基为16(0-9,A-F),权则是每一位的权重,从右到左依次为基的0次幂、1次幂、2次幂……例如十进制数123,实际表示为1×10² + 2×10¹ + 3×10⁰,Java中主要涉及二进制、八进制、十进制和十六进制四种进制,每种进制在代码中有特定的表示形式。
Java中的进制字面量表示
Java允许通过特定前缀直接在代码中书写不同进制的整数字面量,无需额外转换,提高了代码可读性。
- 二进制:以
0b或0B开头,后跟0或1,例如0b1101表示十进制的13,0B0010表示十进制的2。 - 八进制:以
0开头(注意不是字母o),后跟0-7,例如0123表示十进制的83(1×8² + 2×8¹ + 3×8⁰),0755常用于表示Unix文件权限。 - 十进制:无特殊前缀,直接书写0-9的数字,如
10、255等,这是最常用的进制表示。 - 十六进制:以
0x或0X开头,后跟0-9或A-F(不区分大小写),例如0xFF表示十进制的255,0x1A表示十进制的26。
需要注意的是,Java 7及以上版本支持在数字字面量中使用下划线_分隔,提高可读性,如1_000_000(一百万)、0b1101_0010(二进制),但下划线不能出现在开头、或连续两个下划线,也不能在小数点或指数部分。

进制转换的核心方法
除了字面量直接表示,Java还提供了丰富的API实现进制间的转换,主要位于Integer、Long等包装类中。
- 字符串转十进制整数:使用
Integer.parseInt(String s, int radix),其中radix为源进制基数,如Integer.parseInt("1010", 2)将二进制字符串”1010″转为十进制10,Integer.parseInt("FF", 16)将十六进制字符串”FF”转为十进制255。 - 十进制转其他进制字符串:使用
Integer.toString(int i, int radix),如Integer.toString(10, 2)得到”1010″,Integer.toString(255, 16)得到”ff”(默认小写,可传入Character.toUpperCase处理大小写)。 - 其他进制转十进制:也可通过
Integer.valueOf(String s, int radix)实现,与parseInt类似,但返回Integer对象而非基本类型。
对于Long类型,方法类似,如Long.parseLong("1010", 2)、Long.toString(255L, 16)等,二进制还可通过位运算(如<<左移、>>右移)实现快速转换,例如n << 1相当于将二进制数n左移1位(乘以2)。
进制数的实际应用场景
不同进制在Java开发中有各自的应用场景:二进制常用于位运算(如权限控制、状态标记)、底层硬件操作;八进制因与二进制简洁转换(1位八进制=3位二进制),在早期Unix系统权限表示中沿用至今;十六进制因2位十六进制=1字节,广泛用于颜色值(如0xFFFFFF为白色)、内存地址、字节数组转字符串(如Base64编码中常涉及十六进制表示)。

使用进制时的注意事项
八进制字面量需注意前缀0易与数字混淆,Java 7后推荐使用0b、0x等明确前缀,避免误写,进制转换时需注意数值范围,如Integer.parseInt("11111111111111111111111111111111", 2)会因超出int范围(-2³¹~2³¹-1)而抛出NumberFormatException,此时可改用Long或BigInteger处理大数,十六进制字母不区分大小写,但输出时需根据需求统一格式,避免显示不一致。
通过掌握Java中进制数的表示与转换方法,开发者能更高效地处理数据、优化代码逻辑,尤其在底层开发、数据解析等领域发挥重要作用。








