1. 概述

本文将系统性地介绍在 Java 中如何将整数以二进制格式输出。内容涵盖:

  • 手动实现二进制转换的算法逻辑
  • 使用 Java 标准库中的内置方法
  • 如何生成固定位数(补零)的二进制字符串

目标是帮你快速掌握这些技巧,避免踩坑,提升编码效率。


2. 手动实现整数转二进制

在使用现成 API 之前,先理解底层原理。整数转二进制的核心是“除2取余,逆序排列”。

✅ 转换步骤:

  1. 对数字 n 不断除以 2,记录每次的余数
  2. n 更新为商,重复直到 n == 0
  3. 将所有余数逆序拼接,即为二进制表示

📌 示例:将 7 转为二进制

步骤 计算 余数
1 7 ÷ 2 1 3
2 3 ÷ 2 1 1
3 1 ÷ 2 1 0
结果 逆序余数 111

✅ 代码实现

public static String convertIntegerToBinary(int n) {
    if (n == 0) {
        return "0";
    }
    StringBuilder binaryNumber = new StringBuilder();
    while (n > 0) {
        int remainder = n % 2;
        binaryNumber.append(remainder);
        n /= 2;
    }
    binaryNumber = binaryNumber.reverse();
    return binaryNumber.toString();
}

⚠️ 注意:该方法只适用于非负整数。负数涉及补码表示,需特殊处理(见后文)。


3. 使用 Integer#toBinaryString 方法

Java 提供了开箱即用的工具方法:Integer.toBinaryString(int),简单粗暴,推荐日常使用。

✅ 方法签名

public static String toBinaryString(int i)

✅ 示例

int n = 7;
String binaryString = Integer.toBinaryString(n);
assertEquals("111", binaryString);

⚠️ 负数处理

对于负数,该方法会直接输出其补码形式(32位):

System.out.println(Integer.toBinaryString(-1));
// 输出:11111111111111111111111111111111 (32个1)

如果你只需要逻辑上的“二进制表示”,不建议用于负数场景。


4. 使用 Integer#toString(radix) 方法

Integer.toString(int, int) 是一个更通用的方法,支持任意进制转换。

✅ 方法签名

public static String toString(int i, int radix)
  • i:待转换的整数
  • radix:进制基数,二进制传 2

✅ 示例

int n = 7;
String binaryString = Integer.toString(n, 2);
assertEquals("111", binaryString);

✅ 灵活性优势

这个方法不仅限于二进制,还能轻松转八进制、十六进制:

Integer.toString(7, 8);   // "7"  → 八进制
Integer.toString(7, 16);  // "7"  → 十六进制
Integer.toString(255, 16); // "ff" → 十六进制

✅ 推荐指数:高。尤其适合需要动态进制转换的场景。


5. 获取 N 位补零的二进制表示

有时我们需要固定位宽的二进制字符串,比如 8 位(字节)、16 位等。例如:

位宽 数字 7 的表示
4-bit 0111
8-bit 00000111
16-bit 0000000000000111

✅ 方案一:String.format + replace

利用格式化字符串先右对齐空格,再替换为空格为 0

int n = 7;
String binaryString = String.format("%8s", Integer.toBinaryString(n)).replace(" ", "0");
assertEquals("00000111", binaryString);

📌 原理:%8s 表示输出至少占 8 个字符宽度,不足则左补空格。

✅ 方案二:Apache Commons Lang3 的 StringUtils.leftPad

如果你的项目引入了 commons-lang3,可以直接使用 leftPad

int n = 7;
String binaryString = StringUtils.leftPad(Integer.toBinaryString(n), 8, '0');
assertEquals("00000111", binaryString);

⚠️ 注意:传入的是字符 '0',不是字符串 "0"(重载方法存在,但建议统一用 char)。

✅ 自定义工具方法(推荐封装)

public static String toPaddedBinary(int n, int width) {
    return String.format("%" + width + "s", Integer.toBinaryString(n)).replace(' ', '0');
}

使用示例:

toPaddedBinary(7, 8);  // "00000111"
toPaddedBinary(1, 4);  // "0001"

6. 总结

方法 优点 缺点 推荐场景
手动实现 理解原理 冗余,易出错 学习/面试
Integer.toBinaryString() 简洁,标准 API 不支持补零 日常开发
Integer.toString(i, 2) 通用性强,支持多进制 同上 多进制转换场景
String.format + replace 无需依赖,灵活 稍显啰嗦 无外部依赖项目
StringUtils.leftPad() 语义清晰,代码简洁 需引入 commons-lang3 已使用该库的项目

✅ 最佳实践建议:

  • 日常开发首选 Integer.toBinaryString() + String.format 补零
  • 若项目已用 commons-lang3,可直接用 leftPad
  • 面试时能手写算法加分

所有示例代码已托管至 GitHub:https://github.com/baeldung/java-tutorials(路径:core-java-modules/core-java-numbers-3)


原始标题:Print an Integer in Binary Format in Java | Baeldung