Java 二进制及相关运算学习指南
一、二进制基础
二进制是计算机底层数据的存储形式,由 0
和 1
组成,逢二进一。在 Java 中,二进制数可通过前缀 0b
或 0B
表示(如 0b1010
表示十进制的 10)。
二、十进制与二进制的相互转化
Java 中可通过内置方法或手动算法实现进制转化。
1. 十进制转二进制
- 内置方法:
Integer.toBinaryString(int num)
直接返回整数的二进制字符串(无符号,省略前导 0)。 - 手动算法:除 2 取余,逆序排列(适用于理解原理)。
2. 二进制转十进制
- 内置方法:
Integer.parseInt(binaryStr, 2)
将二进制字符串解析为十进制整数。 - 手动算法:按位乘以 2 的幂次并累加(如
1010
= 1×2³ + 0×2² + 1×2¹ + 0×2⁰ = 10)。
三、二进制相关运算
Java 提供了 7 种位运算(针对整数的二进制位):
运算符 | 名称 | 说明 | 示例(a=0b1010, b=0b0110) |
---|---|---|---|
& | 按位与 | 两位均为 1 则为 1,否则为 0 | a & b = 0b0010(2) |
| | 按位或 | 两位有一个为 1 则为 1,否则为 0 | a | b = 0b1110(14) |
^ | 按位异或 | 两位不同则为 1,相同则为 0 | a ^ b = 0b1100(12) |
~ | 按位非 | 0 变 1,1 变 0(符号位也反转) | ~a = -11(补码表示) |
<< | 左移 | 左移 n 位,右侧补 0(相当于 ×2ⁿ) | a << 1 = 0b10100(20) |
>> | 右移 | 右移 n 位,左侧补符号位(相当于 ÷2ⁿ) | a >> 1 = 0b0101(5) |
>>> | 无符号右移 | 右移 n 位,左侧补 0(忽略符号位) | -1 >>> 1 = 2147483647 |
四、测试用例代码
以下代码包含进制转化和位运算的测试示例:
public class BinaryOperations {public static void main(String[] args) {// 1. 十进制转二进制int decimal = 10;String binary = Integer.toBinaryString(decimal);System.out.println("十进制 " + decimal + " 转二进制: " + binary); // 输出:1010// 2. 二进制转十进制String binaryStr = "1010";int decimalFromBinary = Integer.parseInt(binaryStr, 2);System.out.println("二进制 " + binaryStr + " 转十进制: " + decimalFromBinary); // 输出:10// 3. 二进制位运算测试(a=10→0b1010,b=6→0b0110)int a = 10;int b = 6;System.out.println("\n位运算测试(a=0b1010, b=0b0110):");System.out.println("a & b = " + (a & b) + "(二进制:" + Integer.toBinaryString(a & b) + ")"); // 2 → 10System.out.println("a | b = " + (a | b) + "(二进制:" + Integer.toBinaryString(a | b) + ")"); // 14 → 1110System.out.println("a ^ b = " + (a ^ b) + "(二进制:" + Integer.toBinaryString(a ^ b) + ")"); // 12 → 1100System.out.println("~a = " + (~a) + "(二进制:" + Integer.toBinaryString(~a) + ")"); // -11 → 11111111111111111111111111110101System.out.println("a << 1 = " + (a << 1) + "(二进制:" + Integer.toBinaryString(a << 1) + ")"); // 20 → 10100System.out.println("a >> 1 = " + (a >> 1) + "(二进制:" + Integer.toBinaryString(a >> 1) + ")"); // 5 → 101System.out.println("a >>> 1 = " + (a >>> 1) + "(二进制:" + Integer.toBinaryString(a >>> 1) + ")"); // 5 → 101// 4. 特殊值测试(负数二进制)int negative = -10;System.out.println("\n负数 -10 的二进制(补码):" + Integer.toBinaryString(negative)); // 输出:11111111111111111111111111110110}
}
五、运行结果说明
- 进制转化部分验证了
10 ↔ 1010
的正确转化。 - 位运算部分通过具体数值展示了运算规则,注意
~a
结果为负数(因 Java 整数为补码存储)。 - 负数的二进制以补码形式表示,
Integer.toBinaryString()
会输出 32 位完整补码(省略前导 0,但保留符号位)。
通过以上内容,可掌握 Java 中二进制的基本操作及运算逻辑。实际开发中,位运算常用于高效计算(如权限控制、状态标记等场景)。