From a9bc5c9aa7b7065ba61d1a4a7568e822aa6f883c Mon Sep 17 00:00:00 2001 From: Thiflict <121az348@gmail.com> Date: Wed, 24 Jun 2026 15:30:24 +0500 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B1=D0=B0=D0=B3,=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D0=BE=D0=BC=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D1=8F=20insertBin()=20=D0=BC=D0=BE=D0=B3?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=B2=D1=8B=D0=B4=D0=B0=D1=82=D1=8C=20=D0=BE?= =?UTF-8?q?=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20=D0=B8=D0=B7-=D0=B7=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B8=20=D0=B2=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D1=80=20=D1=87=D0=B8=D1=81=D0=BB=D0=B0,=20=D1=83=20?= =?UTF-8?q?=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D0=BE=D0=B3=D0=BE=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D0=B8=D1=81=D1=82=D1=80=20=D0=BC=D0=B5=D0=BD=D1=8C=D1=88?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D0=BC?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/BinConvert.kt | 19 +++++++++++++------ src/test/kotlin/InsertBinTest.kt | 2 +- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/BinConvert.kt b/src/main/kotlin/BinConvert.kt index 19d05a2..d3d45d0 100644 --- a/src/main/kotlin/BinConvert.kt +++ b/src/main/kotlin/BinConvert.kt @@ -96,25 +96,32 @@ object BinConvert { /** * */ - fun Short.insertBit(register: Int, value: Int): Long { - if (register < 0) throw IllegalArgumentException("Регистр не может быть отрицальтельным") - if (value !in 0..1) throw IllegalArgumentException("Значение не должно быть больше 1 и меньше 0") + fun Short.insertBit(register: Int, value: Int): Short { + if (register < 0 || register > 15) + throw IllegalArgumentException("Регистр должен быть в диапазоне 0-15") + if (value !in 0..1) + throw IllegalArgumentException("Значение должно быть 0 или 1") - var binString = this.toBinaryActual() + var binString = this.toBinaryPadded() 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) + return binString.toShort(2) } + fun Short.toBinaryPadded(): String { + // Преобразуем в двоичную строку без знака и дополняем нулями до 16 бит + val unsignedInt = this.toInt() and 0xFFFF + return unsignedInt.toString(2).padStart(16, '0') + } fun Short.toBinaryActual(): String = this.toString(2) } \ No newline at end of file diff --git a/src/test/kotlin/InsertBinTest.kt b/src/test/kotlin/InsertBinTest.kt index 5c15bdd..e9e8372 100644 --- a/src/test/kotlin/InsertBinTest.kt +++ b/src/test/kotlin/InsertBinTest.kt @@ -1,5 +1,5 @@ import ru.thiflict.binaryutils.BinConvert.insertBit fun main() { - println(48.toShort().insertBit(0, 1)) + println(4.toShort().insertBit(6, 1)) } \ No newline at end of file