Compare commits
9 Commits
v1.0.0
...
a103c3154d
| Author | SHA1 | Date | |
|---|---|---|---|
| a103c3154d | |||
| 61ae4f5013 | |||
| f5d0a13e84 | |||
| 1dff8fc23b | |||
| 3c0dbcb519 | |||
| 00fb5b6e90 | |||
| 5c977ea2c8 | |||
| f24ba729f3 | |||
| 14c793b880 |
@@ -4,7 +4,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = "ru.thiflict.binaryutils"
|
||||
version = "1.0.0"
|
||||
version = "1.0.2"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
@@ -27,7 +27,7 @@ publishing {
|
||||
create<MavenPublication>("maven") {
|
||||
groupId = "ru.thiflict.binaryutils"
|
||||
artifactId = "binary-utils"
|
||||
version = "1.0.0"
|
||||
version = "1.0.2"
|
||||
|
||||
from(components["java"])
|
||||
}
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
# Этот скрипт для обычных юзеров ничего из себя не представляет
|
||||
# Только для меинтеинера.
|
||||
export $(cat .env | xargs)
|
||||
./gradlew publish
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# BinaryUtils
|
||||
пока пох на описание лмао
|
||||
Детальная информация о проекте лежит в Wiki
|
||||
|
||||
как импортировать в проект:
|
||||
|
||||
@@ -12,6 +12,6 @@ repositories {
|
||||
|
||||
dependencies {
|
||||
// Добавить в dependencies
|
||||
implementation("ru.thiflict.binaryutils:binary-utils:1.0.0")
|
||||
implementation("ru.thiflict.binaryutils:binary-utils:1.0.3") // У релизов всегда актуальная версия
|
||||
}
|
||||
```
|
||||
@@ -17,14 +17,39 @@ object BinCheck {
|
||||
* Тип данных для проверяемого числа [Short].
|
||||
* Тип данных для проверяемого регистра [Byte]
|
||||
*
|
||||
* Регистр *не может быть* **отрицательным** или **больше 15**
|
||||
*
|
||||
* Пример:
|
||||
* ```
|
||||
* checkRegisterShort(8, 3)
|
||||
* ```
|
||||
* @return true
|
||||
* @return [Boolean]
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
fun checkRegisterShort(input: Short, register: Byte): Boolean {
|
||||
fun checkRegisterShort(input: Short, register: Byte, verbose: Boolean = false): Boolean {
|
||||
// Защиты от дурачков
|
||||
if (register < 0) throw IllegalArgumentException("Проверяемый регистр не может быть отрицательным!")
|
||||
if (register > 15) throw IllegalArgumentException("Проверяемый регистр не может быть больше, чем количество регистров Short!")
|
||||
|
||||
if (verbose) println("Debug: checkRegisterShort(): Выполнена проверка на IllegalArgumentException")
|
||||
|
||||
val binaryString = String.format("%16s", input.toInt().toString(2).replace(' ', '0'))
|
||||
|
||||
if (verbose) println("Debug: checkRegisterShort(): ${
|
||||
if (binaryString.startsWith("-")) {
|
||||
val binaryStringFormatted = binaryString
|
||||
.drop(1)
|
||||
.chunked(4)
|
||||
.joinToString(" ")
|
||||
"-$binaryStringFormatted"
|
||||
}
|
||||
else {
|
||||
binaryString
|
||||
.chunked(4)
|
||||
.joinToString(" ")
|
||||
}
|
||||
}")
|
||||
|
||||
val index = 15 - register.toInt()
|
||||
return binaryString[index] == '1'
|
||||
}
|
||||
|
||||
50
src/main/kotlin/BinGetters.kt
Normal file
50
src/main/kotlin/BinGetters.kt
Normal file
@@ -0,0 +1,50 @@
|
||||
package ru.thiflict.binaryutils
|
||||
|
||||
/**
|
||||
* Объект для получения каких либо данных из вводимого числа
|
||||
*
|
||||
* Репозиторий: https://git.ds1.thiflict.ru/Thiflict/BinaryUtils
|
||||
*
|
||||
* @author Thiflict
|
||||
*
|
||||
* @since[1.0.2]
|
||||
*/
|
||||
|
||||
object BinGetters {
|
||||
|
||||
/**
|
||||
* Возвращает индекс первого старшего бита из вводимого числа.
|
||||
* Если в числе нет старшего бита, то возвращает `null`
|
||||
*
|
||||
* Тип данных для проверяемого числа: [Short].
|
||||
*
|
||||
* Пример:
|
||||
* ```
|
||||
* getFirstHighBitShort(67)
|
||||
* ```
|
||||
* @return [Byte]
|
||||
* @since[1.0.2 не тестировалось на отрицательные числа]
|
||||
*/
|
||||
fun getFirstHighBitShort(input: Short): Byte? {
|
||||
return run {
|
||||
// Для числа 0 возвращаем null
|
||||
if (input == 0.toShort()) {
|
||||
return null
|
||||
}
|
||||
|
||||
// Используем bitwise operations для корректной работы с отрицательными числами
|
||||
var value = input.toInt() and 0xFFFF // Преобразуем в беззнаковое 16-битное число
|
||||
var result: Byte? = null
|
||||
|
||||
// Ищем первый установленный бит с начала (от старших к младшим)
|
||||
for (index in 15 downTo 0) {
|
||||
if (value and (1 shl index) != 0) {
|
||||
result = index.toByte()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,4 +35,11 @@ fun main() {
|
||||
|
||||
// Тест 10: Проверка значения -1 в регистре 0 (должно быть true, так как все биты установлены)
|
||||
println("Тест 10: checkRegisterShort(-1, 0) = ${checkRegisterShort(-1, 0.toByte())}")
|
||||
|
||||
// Тест на кидание IllegalArgumentException №1
|
||||
// println("Тест 11: checkRegisterShort(5, -1) = ${checkRegisterShort(5, (-1).toByte())}")
|
||||
|
||||
// Тест на кидание IllegalArgumentException №2
|
||||
// println("Тест 11: checkRegisterShort(25, 16) = ${checkRegisterShort(32767.toShort(), 15.toByte(), true)}")
|
||||
|
||||
}
|
||||
43
src/test/kotlin/GetFirstHighBitShortTest.kt
Normal file
43
src/test/kotlin/GetFirstHighBitShortTest.kt
Normal file
@@ -0,0 +1,43 @@
|
||||
import ru.thiflict.binaryutils.BinGetters.getFirstHighBitShort
|
||||
|
||||
fun main() {
|
||||
// Тест 1: Число 67 (00000000 01000011 в двоичном виде)
|
||||
val test1 = getFirstHighBitShort(67.toShort())
|
||||
println("Тест 1 - число 67: $test1") // Ожидается 6
|
||||
|
||||
// Тест 2: Число 0 (все биты нули)
|
||||
val test2 = getFirstHighBitShort(0.toShort())
|
||||
println("Тест 2 - число 0: $test2") // Ожидается null
|
||||
|
||||
// Тест 3: Число 1 (только младший бит установлен)
|
||||
val test3 = getFirstHighBitShort(1.toShort())
|
||||
println("Тест 3 - число 1: $test3") // Ожидается 0
|
||||
|
||||
// Тест 4: Число 32767 (максимальное положительное Short число)
|
||||
val test4 = getFirstHighBitShort(32767.toShort())
|
||||
println("Тест 4 - число 32767: $test4") // Ожидается 14
|
||||
|
||||
// Тест 5: Число 16384 (только старший бит установлен)
|
||||
val test5 = getFirstHighBitShort(16384.toShort())
|
||||
println("Тест 5 - число 16384: $test5") // Ожидается 14
|
||||
|
||||
// Тест 6: Число 256 (второй бит с конца установлен)
|
||||
val test6 = getFirstHighBitShort(256.toShort())
|
||||
println("Тест 6 - число 256: $test6") // Ожидается 8
|
||||
|
||||
// Тест 7: Число 128 (восьмой бит с конца установлен)
|
||||
val test7 = getFirstHighBitShort(128.toShort())
|
||||
println("Тест 7 - число 128: $test7") // Ожидается 7
|
||||
|
||||
// Тест 8: Число 255 (младшие 8 бит установлены)
|
||||
val test8 = getFirstHighBitShort(255.toShort())
|
||||
println("Тест 8 - число 255: $test8") // Ожидается 7
|
||||
|
||||
// Тест 9: Число 32768 (внешний бит установлен - отрицательное число)
|
||||
val test9 = getFirstHighBitShort((-32768).toShort())
|
||||
println("Тест 9 - число -32768: $test9") // Ожидается 15
|
||||
|
||||
// Тест 10: Число -1 (все биты установлены)
|
||||
val test10 = getFirstHighBitShort((-1).toShort())
|
||||
println("Тест 10 - число -1: $test10") // Ожидается 15
|
||||
}
|
||||
Reference in New Issue
Block a user