Добавлена функция вставки бита в десятичное число Short

This commit is contained in:
2026-06-23 12:09:47 +05:00
parent c3e93876d2
commit e832f60a32
4 changed files with 43 additions and 3 deletions

View File

@@ -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)
}

View File

@@ -3,7 +3,7 @@ import org.junit.jupiter.api.Test
import ru.thiflict.binaryutils.BinConvert.toBinary
class BinConvertTest {
class ConvertToBinTest {
// ------------------- Long.toBinary() -------------------
@Test

View File

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