From e832f60a322e0f8c9bcefba77166f11ea45c4681 Mon Sep 17 00:00:00 2001 From: thiflict <121az348@gmail.com> Date: Tue, 23 Jun 2026 12:09:47 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=81=D1=82=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B1=D0=B8=D1=82?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D0=B4=D0=B5=D1=81=D1=8F=D1=82=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=D0=B5=20=D1=87=D0=B8=D1=81=D0=BB=D0=BE=20Short?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 4 +-- src/main/kotlin/BinConvert.kt | 35 +++++++++++++++++++ ...{BinConvertTest.kt => ConvertToBinTest.kt} | 2 +- src/test/kotlin/InsertBinTest.kt | 5 +++ 4 files changed, 43 insertions(+), 3 deletions(-) rename src/test/kotlin/{BinConvertTest.kt => ConvertToBinTest.kt} (99%) create mode 100644 src/test/kotlin/InsertBinTest.kt diff --git a/build.gradle.kts b/build.gradle.kts index 17db2d2..e0c3ad0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } group = "ru.thiflict.binaryutils" -version = "1.0.3" +version = "1.0.4-dev1" repositories { mavenCentral() @@ -27,7 +27,7 @@ publishing { create("maven") { groupId = "ru.thiflict.binaryutils" artifactId = "binary-utils" - version = "1.0.3" + version = "1.0.4-dev1" from(components["java"]) } diff --git a/src/main/kotlin/BinConvert.kt b/src/main/kotlin/BinConvert.kt index 743742d..19d05a2 100644 --- a/src/main/kotlin/BinConvert.kt +++ b/src/main/kotlin/BinConvert.kt @@ -82,4 +82,39 @@ object BinConvert { .joinToString("") .toInt() } + + fun Long.toDecimalsActual(): Int = + this + .toString() + .filter { it == '0' || it == '1' } // Отфильтровываем только биты + .reversed() // Переворачиваем для удобства обработки + .mapIndexed { index, char -> + if (char == '1') 1 shl index else 0 // shl = сдвиг влево + } + .sum() + + /** + * + */ + fun Short.insertBit(register: Int, value: Int): Long { + if (register < 0) throw IllegalArgumentException("Регистр не может быть отрицальтельным") + if (value !in 0..1) throw IllegalArgumentException("Значение не должно быть больше 1 и меньше 0") + + var binString = this.toBinaryActual() + val chars = binString.toCharArray() + + // Рассчитываем индекс в массиве с учетом отсчета справа налево + val stringIndex = chars.lastIndex - register + + // Безопасно вставляем текстовый символ '1' или '0' + chars[stringIndex] = if (value == 1) '1' else '0' + + binString = String(chars) + + // Парсим бинарную строку обратно в число + return binString.toLong(2) + } + + + fun Short.toBinaryActual(): String = this.toString(2) } \ No newline at end of file diff --git a/src/test/kotlin/BinConvertTest.kt b/src/test/kotlin/ConvertToBinTest.kt similarity index 99% rename from src/test/kotlin/BinConvertTest.kt rename to src/test/kotlin/ConvertToBinTest.kt index dd4836e..a46e02e 100644 --- a/src/test/kotlin/BinConvertTest.kt +++ b/src/test/kotlin/ConvertToBinTest.kt @@ -3,7 +3,7 @@ import org.junit.jupiter.api.Test import ru.thiflict.binaryutils.BinConvert.toBinary -class BinConvertTest { +class ConvertToBinTest { // ------------------- Long.toBinary() ------------------- @Test diff --git a/src/test/kotlin/InsertBinTest.kt b/src/test/kotlin/InsertBinTest.kt new file mode 100644 index 0000000..5c15bdd --- /dev/null +++ b/src/test/kotlin/InsertBinTest.kt @@ -0,0 +1,5 @@ +import ru.thiflict.binaryutils.BinConvert.insertBit + +fun main() { + println(48.toShort().insertBit(0, 1)) +} \ No newline at end of file