在Java中,我们可以使用Integer.toBinaryString(int)将Integer转换为二进制字符串表示形式。
Integer.java
public final class Integer extends Number
implements Comparable, Constable, ConstantDesc {
public static String toBinaryString(int i) {
return toUnsignedString0(i, 1);
}
//...
}
本文将向您展示两种将Integer转换为二进制字符串代表的方法。
JDK Integer.toBinaryString 。
老派位掩蔽技术。
1.将Int转换为Binary Integer.toBinaryString
1.1此Java示例尝试将int转换为二进制字符串表示形式。
int input = 10;
String result = Integer.toBinaryString(input);
System.out.println(result); // 1010
输出量
Terminal
1010
1.2 Integer.toBinaryString的输出缺少零填充,我们可以使用String.Format和replaceAll改进或漂亮地打印二进制字符串。
int input = 10;
String result = Integer.toBinaryString(input);
String resultWithPadding = String.format("%32s", result).replaceAll(" ", "0"); // 32-bit Integer
System.out.println(resultWithPadding);
输出量
Terminal
00000000000000000000000000001010
1.3此Java示例使用分隔符进一步改进了二进制格式。
IntToBinaryExample1.java
package com.mkyong.crypto.bytes;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class IntToBinaryExample1 {
public static void main(String[] args) {
int input = 10;
String result = Integer.toBinaryString(input);
String resultWithPadding = String.format("%32s", result).replaceAll(" ", "0");
System.out.println(resultWithPadding);
System.out.println(printBinary(resultWithPadding, 8, " | ")); // 00000000 | 00000000 | 00000000 | 00001010
System.out.println(printBinary(resultWithPadding, 4, " ")); // 0000 0000 0000 0000 0000 0000 0000 1010
}
public static String printBinary(String binary, int blockSize, String separator) {
Listresult = new ArrayList<>();
int index = 0;
while (index < binary.length()) {
result.add(binary.substring(index, Math.min(index + blockSize, binary.length())));
index += blockSize;
}
return result.stream().collect(Collectors.joining(separator));
}
}
输出量
Terminal
00000000000000000000000000001010
00000000 | 00000000 | 00000000 | 00001010
0000 0000 0000 0000 0000 0000 0000 1010
2.将Int转换为Binary(位掩码)
2.1此Java示例使用位掩码从整数生成二进制字符串。
StringBuilder result = new StringBuilder();
for (int i = 31; i >= 0; i--) {
int mask = 1 << i;
result.append((number & mask) != 0 ? "1" : "0");
}
在按位与运算中,只有1 & 1为1 。
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
2.2例如, int 10是一个32位整数,在内部,计算机将其视为0000 1010 。 这个想法是我们循环32次,每次创建一个新的32位int 1 << loop - 1 ,并与int 10进行按位与运算,如果结果不等于零,则附加一个附加零。
请参阅以下模式:
# Each loop will move the bit from the left side to the right side by 1 bit.
# loop 1
00000000 | 00000000 | 00000000 | 00001010 = 10
& = Bitwise AND
10000000 | 00000000 | 00000000 | 00000000 = 1 << 31
=
00000000 | 00000000 | 00000000 | 00000000 = 0 (result)
# loop 2
00000000 | 00000000 | 00000000 | 00001010 = 10
& = Bitwise AND
01000000 | 00000000 | 00000000 | 00000000 = 1 << 30
=
00000000 | 00000000 | 00000000 | 00000000 = 0 (result)
# fast forward...3...28
# loop 29
00000000 | 00000000 | 00000000 | 00001010 = 10
& = Bitwise AND
00000000 | 00000000 | 00000000 | 00001000 = 1 << 3
=
00000000 | 00000000 | 00000000 | 00001000 = 1 (result)
# loop 30
00000000 | 00000000 | 00000000 | 00001010 = 10
& = Bitwise AND
00000000 | 00000000 | 00000000 | 00000100 = 1 << 2
=
00000000 | 00000000 | 00000000 | 00000000 = 0 (result)
# loop 31
00000000 | 00000000 | 00000000 | 00001010 = 10
& = Bitwise AND
00000000 | 00000000 | 00000000 | 00000010 = 1 << 1
=
00000000 | 00000000 | 00000000 | 00000010 = 1 (result)
# loop 32
00000000 | 00000000 | 00000000 | 00001010 = 10
& = Bitwise AND
00000000 | 00000000 | 00000000 | 00000001 = 1 << 0
=
00000000 | 00000000 | 00000000 | 00000000 = 0 (result)
这是完整的示例。
IntToBinaryExample2.java
package com.mkyong.crypto.bytes;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class IntToBinaryExample2 {
public static void main(String[] args) {
int input = 10;
String result = convertIntToBinaryString(input);
String resultWithPadding = String.format("%32s", result).replaceAll(" ", "0");
System.out.println(printBinary(resultWithPadding, 8, " - "));
}
public static String convertIntToBinaryString(int number) {
StringBuilder result = new StringBuilder();
for (int i = 31; i >= 0; i--) {
int mask = 1 << i;
result.append((number & mask) != 0 ? "1" : "0");
}
return result.toString();
}
public static String printBinary(String binary, int blockSize, String separator) {
Listresult = new ArrayList<>();
int index = 0;
while (index < binary.length()) {
result.add(binary.substring(index, Math.min(index + blockSize, binary.length())));
index += blockSize;
}
return result.stream().collect(Collectors.joining(separator));
}
}
输出量
Terminal
00000000 - 00000000 - 00000000 - 00001010
参考文献
维基百科–位屏蔽
维基百科-按位与
Java –如何将字节转换为二进制字符串
Oracle – Java原始数据类型
翻译自: https://mkyong.com/java/java-convert-an-integer-to-a-binary-string/