Добавлена функция вставки бита в десятичное число Short
This commit is contained in:
@@ -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)
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import org.junit.jupiter.api.Test
|
||||
import ru.thiflict.binaryutils.BinConvert.toBinary
|
||||
|
||||
|
||||
class BinConvertTest {
|
||||
class ConvertToBinTest {
|
||||
|
||||
// ------------------- Long.toBinary() -------------------
|
||||
@Test
|
||||
5
src/test/kotlin/InsertBinTest.kt
Normal file
5
src/test/kotlin/InsertBinTest.kt
Normal file
@@ -0,0 +1,5 @@
|
||||
import ru.thiflict.binaryutils.BinConvert.insertBit
|
||||
|
||||
fun main() {
|
||||
println(48.toShort().insertBit(0, 1))
|
||||
}
|
||||
Reference in New Issue
Block a user