Исправлен баг, при котором функция 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 {
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)
}

View File

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