Исправлен баг, при котором функция insertBin() могла выдать ошибку из-за попытки вставить значение в регистр числа, у которого регистр меньше вставляемого
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
@@ -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))
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user