Merge pull request 'Добавлена фукнция getFirstHighBitShort()' (#2) from v1.0.2 into master
Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
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