Статьи Королевства Дельфи


Lesson11 - часть 2


На этом описание операций заканчивается, и переходим к практическим примерам. Но вначале немного слов о нотации

Применяемая нотация при отображении чисел в литературе

Числа в символьной форме принято отображать, так чтобы младшие разряды были справа, а строки слева, при этом если используется выравнивание, то оно тоже подчиняется этим правилам.

Нумерация разрядов начинается с нуля в соответствии со степень разряда и описывается формулой 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);

РазрядыB7B6B5B4B3B2B1B0
До (1)10011101
После10011101
До (2)10011001
После10011101




Начало  Назад  Вперед