This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| ru:software:homelab:library:bit [2013/08/14 21:53] – eduardtlmk | ru:software:homelab:library:bit [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Битовые операции ====== | ||
| - | Библиотека битовых операций – это набор общепринятых макрофункций для совершения типичных битовых действий. Эти функции могут быть использованы в любых регистрах и типах данных, | ||
| - | |||
| - | Битовым индексом считается порядковый номер бита, начиная с наименее важного (англ. //least significant bit//, сокращённо LSB). Подсчёт начинается с нуля. Значение битового индекса у 8-битного числа 0-7, у 16-бинтого - 0-15 и 32-битного 0-31. | ||
| - | |||
| - | ===== Функции ===== | ||
| - | |||
| - | * **// | ||
| - | Перевод битового индекса в битовую маску. Параметры: | ||
| - | * //bit// - Битовый индекс. | ||
| - | * Возвращает битовую маску. | ||
| - | |||
| - | * **// | ||
| - | Настойка конкретного бита в высокое положение в переменной. Параметры: | ||
| - | * //value// - Переменная. | ||
| - | * //bit// - Битовый индекс. | ||
| - | |||
| - | * **// | ||
| - | Настойка конкретного бита в низкое положение в переменной. Параметры: | ||
| - | * //value// - Переменная. | ||
| - | * //bit// - Битовый индекс. | ||
| - | |||
| - | * **// | ||
| - | Настойка конкретного бита в желаемое положение в переменной. Параметры: | ||
| - | * //value// - Переменная. | ||
| - | * //bit// - Битовый индекс. | ||
| - | * //state// - Значение (//true// или //false//). | ||
| - | |||
| - | * **// | ||
| - | Инвертирование (низкий высоким и наоборот) состояния конкретного бита в переменной. Параметры: | ||
| - | * //value// - Переменная. | ||
| - | * //bit// - Битовый индекс. | ||
| - | |||
| - | * **// | ||
| - | Контроль высокого положения значения конкретного бита. Параметры: | ||
| - | * //value// - Переменная. | ||
| - | * //bit// - Битовый индекс. | ||
| - | * Возвращает значение //true//, если бит высокий и //false//, если низкий. | ||
| - | |||
| - | * **// | ||
| - | Контроль низкого положения значения конкретного бита. Параметры: | ||
| - | * //value// - Переменная. | ||
| - | * //bit// - Битовый индекс. | ||
| - | * Возвращает значение //true//, если бит низкий и //false//, если высокий. | ||
| - | |||
| - | ===== Пример ===== | ||
| - | |||
| - | Установка третьего бита высоким и инвертирование последнего в переменной //b//. | ||
| - | |||
| - | <code c> | ||
| - | #include < | ||
| - | |||
| - | int main(void) | ||
| - | { | ||
| - | unsigned char b = 0x00; | ||
| - | |||
| - | bit_set(b, 2); | ||
| - | bit_invert(b, | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Исходный код ===== | ||
| - | |||
| - | Далее приведён сокращённый исходный код библиотеки, | ||
| - | |||
| - | <code c> | ||
| - | // | ||
| - | // Функции для работы с битами | ||
| - | // | ||
| - | #define bit_mask(bit) | ||
| - | #define bit_set(value, | ||
| - | #define bit_clear(value, | ||
| - | #define bit_invert(value, | ||
| - | #define bit_is_set(value, | ||
| - | #define bit_is_clear(value, | ||
| - | #define bit_set_to(v, | ||
| - | |||
| - | // | ||
| - | // Функции для работы с битовыми масками | ||
| - | // | ||
| - | #define bitmask_set(value, | ||
| - | #define bitmask_clear(value, | ||
| - | #define bitmask_invert(value, | ||
| - | #define bitmask_set_to(v, | ||
| - | #define bitmask_is_set(value, | ||
| - | </ | ||