Автор оригинала: mkyong.
В Java мы можем использовать Целое число.тоБинариСтринг(int)
для преобразования целого числа в двоичный строковый представитель.
public final class Integer extends Number implements Comparable, Constable, ConstantDesc { public static String toBinaryString(int i) { return toUnsignedString0(i, 1); } //... }
В этой статье мы покажем вам два метода преобразования целого числа в двоичный строковый представитель.
- JDK
Целое число.тоБинариСтринг
. - Старая школа немного маскировки техника.
1. Преобразование Int в двоичный код Преобразование Int в двоичный код
1.1 Этот пример Java пытается преобразовать int
в двоичное строковое представление.
int input = 10; String result = Integer.toBinaryString(input); System.out.println(result); // 1010
Выход
1010
1.2 Вывод целого числа.toBinaryString
– это отсутствие нулевых заполнений, и мы можем использовать String. Формат
и Замените
, чтобы улучшить или красиво напечатать двоичную строку.
int input = 10; String result = Integer.toBinaryString(input); String resultWithPadding = String.format("%32s", result).replaceAll(" ", "0"); // 32-bit Integer System.out.println(resultWithPadding);
Выход
00000000000000000000000000001010
1.3 Этот пример 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)); } }
Выход
00000000000000000000000000001010 00000000 | 00000000 | 00000000 | 00001010 0000 0000 0000 0000 0000 0000 0000 1010
2. Преобразование Int в двоичный код (битовая маскировка)
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 << цикл - 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)
Вот полный пример.
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)); } }
Выход
00000000 - 00000000 - 00000000 - 00001010
Рекомендации
- Википедия – битовая маскировка
- Википедия – Побитовая И
- Java – Как преобразовать байт в двоичную строку
- Примитивные типы данных Oracle – Java
Оригинал: “https://mkyong.com/java/java-convert-an-integer-to-a-binary-string/”