Как видим, вне зависимости от начального состояние бита, после выполнения операции бит становится равны единице.
Сброс бита
Для сброса отдельного бита или группы битов используется операция И совместно с инверсной маской, использование иллюстрируется ниже приведенным кодом в виде отдельной функции и результатом выполнения в виде таблицы. function ResetBit(Src: Integer; bit: Integer): Integer; begin Result := Src and not (1 shl Bit); end; Здесь происходит следующее:
Сначала мы рассчитываем позицию бита - (1 shl Bit), затем с помощью операции NOT инвертируем полученную маску, устанавливая, не затрагиваемые биты маски в единицу, а затрагиваемый бит в ноль, затем сбрасываем этот бит, а результат возвращаем результат через предопределенную переменную Result.
Пример использования:
DummyValue := ResetBit(DummyValue, 2);
Разряды | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
До (1) | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
После | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
До (2) | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
После | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
Как видим, вне зависимости от начального состояние бита, после выполнения операции бит становится равны нулю.
Переключение бита
Для переключения отдельного бита или группы битов используется операция исключающие ИЛИ, использование иллюстрируется ниже приведенным кодом в виде отдельной функции и результатом выполнения в виде таблицы. function InvertBit(Src: Integer; bit: Integer): Integer; begin Result := Src xor (1 shl Bit); end; Здесь происходит следующее:
Сначала мы рассчитываем позицию бита - (1 shl Bit), затем с помощью операции XOR переключаем бит, а результат возвращаем результат через предопределенную переменную Result.
Пример использования: DummyValue := InvertBit(DummyValue, 2);
Разряды | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
До (1) | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
После | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
До (2) | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
После | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |