56 lines
2.0 KiB
Kotlin
56 lines
2.0 KiB
Kotlin
package ru.thiflict.binaryutils
|
|
|
|
/**
|
|
* Объект для проверок двоичного кода
|
|
*
|
|
* Репозиторий: https://git.ds1.thiflict.ru/Thiflict/BinaryUtils
|
|
*
|
|
* @author Thiflict
|
|
*
|
|
* @since[1.0.0]
|
|
*/
|
|
object BinCheck {
|
|
|
|
/**
|
|
* Проверяет наличие единицы в заданом регистре
|
|
*
|
|
* Тип данных для проверяемого числа [Short].
|
|
* Тип данных для проверяемого регистра [Byte]
|
|
*
|
|
* Регистр *не может быть* **отрицательным** или **больше 15**
|
|
*
|
|
* Пример:
|
|
* ```
|
|
* checkRegisterShort(8, 3)
|
|
* ```
|
|
* @return [Boolean]
|
|
* @throws IllegalArgumentException
|
|
*/
|
|
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'
|
|
}
|
|
} |