Битовые маски

от admin
12-02-2011
ОСНОВЫ РЕЕСТРА
Нет коммент.


Сейчас вам придется вспомнить школьный курс информатики. Как мы знаем, один символ — это один байт. Таким образом, слово «байт» занимает 4 байта (4 символа). В одном байте восемь битов, каждый из которых может  принимать значение 0 или 1.

Пойдем дальше, Возьмем любой символ, например, 1. В ASCII-таблице этому символу соответствует код 49. Переведем 49 в двоичную систему и получим вот такое число:

0011 0001

Зачем нам это все нужно знать? Дело в том, что некоторые простые  настройки в реестре Windows хранятся в виде одного байта. Рассмотрим следующее число:

0000 0111

Первые четыре бита не используются, остальные, очевидно, используются для каких-то настроек: 0 — функция выключена, а 1 — включена. Хранить настройки в виде одного байта очень экономно: если нам нужно хранить  четыре параметра, которые могут принимать только значения 0 или 1, то  намного проще хранить их в виде одного байта. Такое решение позволяет  экономить до 7 байтов (при условии, что используются все восемь параметров).

Но есть небольшая проблема. Наше число 0111 будет просто отображаться как число 7. Как же установить определенный бит нашего байта с  настройками? Можно, конечно, преобразовать число 7 в двоичную систему,  получить число 0000 0111, затем установить какой-то бит этого числа, а новое число (пусть это будет 1000 0111) преобразовать обратно в десятичную  систему (получится 135) и записать его в реестр. Но, согласитесь, это не очень удобно.

Намного проще использовать битовые маски, позволяющие выделить из  байта бит, соответствующий маске. Разряды двоичного числа нумеруются  справа налево.

1 0 0 0 0 1 1 1
7 6 5 4 3 2 1 0

Таб. 1. Порядок нумерации разрядов

В верхней части таблицы,  изображено наше  число (135), а в нижней части — номера разрядов. Как видите, разряды  нумеруются начиная с нуля справа налево.

Битовая маска определяет, какой бит нужно установить (1) или, наоборот, снять. На этом сайте вы можете встретить инструкцию, которая требует с  помощью битовой маски 0×80 установить значение бита в 0. Битовая маска 0×80 соответствует седьмому биту. Если мы сбросим этот бит, то наше число превратится обратно в число 7 (0000 0111).

В табл. 2 приведены битовые маски для байта.

Таблица 2. Битовые маски

Разряд Битовая маска Разряд Битовая маска
7 0×80 3 0×08
6 0×40 2 0×04
5 0×20 1 0×02
4

0×10

0 0×01


Оцените статью:
1 голос2 голоса3 голоса4 голоса5 голосов (Нет голосов)
Loading...Loading...
1 547 визитов
Также смотрите

Оставьте свой комментарий к статье