Исправлен баг, при котором функция insertBin() могла выдать ошибку из-за попытки вставить значение в регистр числа, у которого регистр меньше вставляемого

This commit is contained in:
2026-06-24 15:30:24 +05:00
parent e832f60a32
commit a9bc5c9aa7
2 changed files with 14 additions and 7 deletions

View File

@@ -96,25 +96,32 @@ object BinConvert {
/** /**
* *
*/ */
fun Short.insertBit(register: Int, value: Int): Long { fun Short.insertBit(register: Int, value: Int): Short {
if (register < 0) throw IllegalArgumentException("Регистр не может быть отрицальтельным") if (register < 0 || register > 15)
if (value !in 0..1) throw IllegalArgumentException("Значение не должно быть больше 1 и меньше 0") 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 chars = binString.toCharArray()
// Рассчитываем индекс в массиве с учетом отсчета справа налево // Рассчитываем индекс в массиве с учетом отсчета справа налево
val stringIndex = chars.lastIndex - register val stringIndex = chars.lastIndex - register
// Безопасно вставляем текстовый символ '1' или '0' // Вставляем значение в нужный регистр
chars[stringIndex] = if (value == 1) '1' else '0' chars[stringIndex] = if (value == 1) '1' else '0'
binString = String(chars) 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) fun Short.toBinaryActual(): String = this.toString(2)
} }

View File

@@ -1,5 +1,5 @@
import ru.thiflict.binaryutils.BinConvert.insertBit import ru.thiflict.binaryutils.BinConvert.insertBit
fun main() { fun main() {
println(48.toShort().insertBit(0, 1)) println(4.toShort().insertBit(6, 1))
} }