Как перевести число в двоичную или шестнадцатеричную систему
Короткий ответ
У Integer есть готовые методы для двоичной, восьмеричной и шестнадцатеричной записи:
void main() {
int number = 255;
IO.println(Integer.toBinaryString(number));
IO.println(Integer.toOctalString(number));
IO.println(Integer.toHexString(number));
}Результат:
11111111
377
ffЛюбое основание
Integer.toString(n, radix) переводит в систему с любым основанием от 2 до 36:
void main() {
IO.println(Integer.toString(255, 3));
IO.println(Integer.toString(35, 36));
}Результат:
100110
zОбратно в число
parseInt() со вторым аргументом читает строку в нужной системе:
void main() {
IO.println(Integer.parseInt("1010", 2));
IO.println(Integer.parseInt("ff", 16));
}Результат:
10
255С ведущими нулями
toBinaryString() не добавляет нули слева. Дополните строку вручную, а для шестнадцатеричной записи используйте HexFormat:
void main() {
String bits = Integer.toBinaryString(5);
IO.println("0".repeat(8 - bits.length()) + bits);
IO.println(HexFormat.of().toHexDigits((byte) 10));
IO.println(HexFormat.of().formatHex(new byte[] {1, 127, -1}));
}Результат:
00000101
0a
017fffЧастая ошибка
Удивиться отрицательным числам. Методы показывают внутреннее представление числа — дополнительный код из 32 бит:
void main() {
IO.println(Integer.toBinaryString(-1));
IO.println(Integer.toHexString(-1));
IO.println(Integer.toString(-1, 2));
}Результат:
11111111111111111111111111111111
ffffffff
-1Если нужен знак минус, используйте Integer.toString(n, 2).
Функции из этого ответа
- Integer.toBinaryString() — Записывает число в двоичной системе. Рядом — toHexString() и toOctalString().
- Integer.parseInt() — Превращает строку с целым числом в int.