На этом описание операций заканчивается, и переходим к практическим примерам. Но вначале немного слов о нотации
Применяемая нотация при отображении чисел в литературе
Числа в символьной форме принято отображать, так чтобы младшие разряды были справа, а строки слева, при этом если используется выравнивание, то оно тоже подчиняется этим правилам.
Нумерация разрядов начинается с нуля в соответствии со степень разряда и описывается формулой K*M^N, где K это коэффициент в диапазоне от 0 до M-1, M это основание числа, а N это степень. Число в степени 0 для всех оснований равно 1.
Посмотрим на примере следующей таблицы для четырех основных оснований.
Для числа 100
Основание
Значение
Формула
2
4
1*2^2 + 0*2^1 +0*2^0
8
64
1*8^2 + 0*8^1 +0*8^0
10
100
1*10^2 + 0*10^1 + 0*2^0
16
256
1*16^2 + 0*16^1 + 0*2^0
Для числа 123
Основание
Значение
Формула
2
X
Недопустимая комбинация
8
83
1*8^2 + 2*8^1 + 3*8^0
10
123
1*10^2 + 2*10^1 + 3*10^0
16
291
1*16^2 + 2*16^1 + 3*16^0
Практические примеры
В начале несколько простых примеров по использованию логических операций, а в заключение будет рассмотрено применение этих приемов для работы с каталогами.
Получение позиции бита или его значения 1 shl N
В данном примере единица сдвигается влево на нужное количество разрядов, и в результате получаем двоичное значение, равное 2^N, где установлен один единственный бит, соответствующий разряду числа. Этот прием может использоваться с переменной для расчета позиции во время выполнения или во время компиляции, во втором случае код генерироваться не будет, а компилятор просто рассчитает значение и подставит его в программу, не генерируя дополнительного кода. Это удобно для указания номера бита, не представляя его в виде десятичной или шестнадцатеричной константы. Но чаще бывает удобнее использовать именованные константы, поскольку они более информативны, примеры этого будут приведены в конце статьи.
Установка бита
Для установки отдельного бита или группы битов используется операция ИЛИ, использование иллюстрируется ниже приведенным кодом в виде отдельной функции и результатом выполнения в виде таблицы.
function SetBit(Src: Integer; bit: Integer): Integer; begin Result := Src or (1 shl Bit); end; Здесь происходит следующее: Сначала мы рассчитываем позицию бита - (1 shl Bit), затем устанавливаем полученный бит и возвращаем результат через предопределенную переменную Result. Пример использования: DummyValue := SetBit(DummyValue, 2);