package ru.thiflict.binaryutils /** * Объект выполняет конвертации чисел из одной системы счисления в другую. * * Репозиторий: https://git.ds1.thiflict.ru/Thiflict/BinaryUtils * * @author Thiflict * * @since[1.0.3] */ object BinConvert { /** * Преобразует значение типа [Long] в строку, представляющую его 64-битное двоичное представление. * * Биты выводятся от старшего (индекс 63) к младшему (индекс 0). Каждый бит представлен символом '0' или '1'. * * Результат всегда содержит ровно 64 символа, включая ведущие нули. * * @return строка длиной 64 символа, состоящая из нулей и единиц, соответствующая двоичному представлению числа. */ fun Long.toBinary(): String { return (0..63) .reversed() .map { bit -> (this shr bit) and 1 } .joinToString("") } /** * Преобразует значение типа [Int] в целое число, десятичная запись которого * * совпадает с 32-битным двоичным представлением исходного числа (включая ведущие нули). * * Биты перебираются от старшего (индекс 31) к младшему (индекс 0). * * Полученная строка из символов '0' и '1' интерпретируется как десятичное число. * * @return целое число, десятичное представление которого повторяет 32-битную двоичную форму исходного значения. */ fun Int.toBinary(): String { return (0..31) .reversed() .map { bit -> (this shr bit) and 1 } .joinToString("") } /** * Преобразует значение типа [Short] в целое число, десятичная запись которого * * совпадает с 16-битным двоичным представлением исходного числа (включая ведущие нули). * * Значение [Short] перед обработкой приводится к [Int]. Биты перебираются от старшего (индекс 15) * * к младшему (индекс 0). Полученная строка из '0' и '1' интерпретируется как десятичное число. * * @return целое число, десятичное представление которого повторяет 16-битную двоичную форму исходного значения. */ fun Short.toBinary(): Long { return (0..15) .reversed() .map { bit -> (this.toInt() shr bit) and 1 } .joinToString("") .toLong() } /** * Преобразует значение типа [Byte] в целое число, десятичная запись которого * * совпадает с 8-битным двоичным представлением исходного числа (включая ведущие нули). * * Значение [Byte] перед обработкой приводится к [Int]. Биты перебираются от старшего (индекс 7) * * к младшему (индекс 0). Полученная строка из '0' и '1' интерпретируется как десятичное число. * * @return целое число, десятичное представление которого повторяет 8-битную двоичную форму исходного значения. */ fun Byte.toBinary(): Int { return (0..7) .reversed() .map { bit -> (this.toInt() shr bit) and 1 } .joinToString("") .toInt() } }