Советы по Delphi


Манипулирование битами


Ок, я покажу как можно это сделать на примере 4 битов. Битовые маски обычно используются в некоторых специфических свойствах.

Для 4-битных чисел максимальное значение равно 1+2+4+8 = 15 (или 1111). Если свойство будет использовать биты как флажки ( 1 = True, 0 = False), то для каждой комбинации флажков результирующее число будет всегда уникальным.

Теперь поставим перед собой задачу определения статуса отдельного бита. Довольно муторным выглядит для такой задачи преобразования битов в десятичное число. Пойдем другим путем. Возьмем число, скажем 7 (0111), и попробуем выставить ему третий справа бит. Значение для проверки - 0100 (4 десятичное).

Итак, мы сравниваем две величины - 0100 и 0111, бит за битом. Вот некоторая "кухня" работы операторов, выполняющих битовые команды: 0100 0111 4 AND 7 = 0100 (4) (=4, т.к. бит, который мы хотим выставить, устанавливается в 1) 4 OR 7 = 0111 (7) (не так много в этом примере) 4 XOR 7 = 0011 (3) Если вы следуете за ходом моей мысли, то вы поймете, почему я начал с операции AND. Так как мы точно знаем, что идет проверка на выставленность единственного бита, который должен быть установлен в сравниваемом значении, то возможный результат может быть только 0 или (как в показанном примере) 4.

Итак, ваш код должен быть следующим: If (YourCheckVar AND 4) = 4 Then 3-й бит установлен Else 3-й бит не установлен; [001992]



Содержание раздела