在Java中,二进制计算主要通过位运算实现。以下是基础知识和示例:
一、二进制转换方法
十进制转二进制 使用`Integer`类的方法:
```java
int num = 255;
String binaryStr = Integer.toBinaryString(num);
System.out.println(binaryStr); // 输出: 11111111
```
其他进制转换方法:
- 八进制:`Integer.toOctalString(num)`
- 十六进制:`Integer.toHexString(num)`
其他进制转十进制
使用`Integer.valueOf(String s, int radix)`方法:
```java
String binaryStr = "0101";
int decimalNum = Integer.valueOf(binaryStr, 2);
System.out.println(decimalNum); // 输出: 5
```
二、基本位运算
按位与(&)
仅当两个对应位都为1时结果为1,否则为0。 ```java
int a = 51 (00110011);
int b = 5 (00000101);
int result = a & b; // 00000001,即1
```
特殊用法:与0运算可清零(如取低4位)。
按位或(|)
只要两个对应位中有一个为1,结果为1。 ```java
int a = 51 (00110011);
int b = 9 (00001001);
int result = a | b; // 00111011,即53
```
按位异或(^)
仅当两个对应位不同时结果为1。 ```java
int a = 51 (00110011);
int b = 9 (00001001);
int result = a ^ b; // 00111010,即52
```
按位取反(~)
对每个二进制位取反(0变1,1变0)。 ```java
int num = 51 (00110011);
int result = ~num; // -52,补码表示
```
三、二进制运算示例
加法(不使用`+`运算符)
通过按位异或和按位与实现:
```java
public static int addBinary(String a, String b) {
int carry = 0;
StringBuilder result = new StringBuilder();
int i = a.length() - 1;
int j = b.length() - 1;
while (i >= 0 || j >= 0 || carry != 0) {
int bitA = i >= 0 ? a.charAt(i) - '0' : 0;
int bitB = j >= 0 ? b.charAt(j) - '0' : 0;
int sum = bitA ^ bitB ^ carry;
carry = (bitA & bitB) | (bitA & carry) | (bitB & carry);
result.insert(0, sum);
i--;
j--;
}
return Integer.parseInt(result.toString());
}
```
四、注意事项
负数表示: Java使用补码表示负数,需注意运算结果的正负判断。 数据类型限制
通过以上方法,可灵活实现二进制转换与运算。