Побитовые операции осуществляются следующим образом: с каждым битом (0 принимается за False, 1 - за True) производится соответствующая логическая операция. Например:
00010101 and 00011001 = 00010001
00010101 or 00011001 = 00011101
00010101 xor 00011001 = 00001100
not 00010101 = 11101010
(операнды и результат представлены в двоичной форме).
Операциии shl и shr имеют вид:
a shl n
a shr n
где n - целое положительное число, a - целое число.
a shl n представляет собой целое положительное, полученное из двоичного представления числа a сдвигом влево на n позиций. Добавляемые справа позиции заполняются нулями.
a shr n представляет собой целое положительное, полученное из двоичного представления числа a сдвигом вправо на n позиций.
Например:
3 shl 2 = 12
12 shr 2 = 3
поскольку 3=11>2, после сдвига влево на 2 позиции 11>2 преобразуется в 1100>2=12, а 12=1100>2 после сдвига вправо на 2 позиции преобразуется в 11>2=3.
Операции сравнения
Операции сравнения <, >, <=, >=, =, <> возвращают значение типа boolean и применяются к операндам простого типа и к строкам.
Операции = и <> также применяются ко всем типам. Для размерных типов по умолчанию сравниваются значения, для ссылочных типов - ссылки. Можно переопределить это поведение, перегрузив операции = и <>. Аналогично можно перегрузить все операции сравнения для типов записей и классов, вводимых пользователем.
Строковые операции
К строкам применимы все операции сравнения <, >, <=, >=, =, <>. Сравнение строк на неравенство осуществляется лексикографически: s1 < s2 если для первого несовпадающего символа с номером i s1[i] Кроме этого, к строкам и символам применима операция конкатенации (слияния) +, ее результат имеет строковый тип. Например, 'a'+'b'='ab'. К строкам также применима операция +=: s += s1; // s := s + s1; Строка может складываться с числом, при этом число предварительно преобразуется к строковому представлению: s := 'Ширина: '+15; // s = 'Ширина: 15' s := 20.5+''; // s = '20.5' s += 1; // s = '20.51' Над строками и целыми определена операция *: s*n и n*s означает строку, образованную из строки s, повторенной n раз: s := '*'*10; // s = '**********' s := 5*'ab' // s = 'ababababab' s := 'd'; s *= 3; // s = 'ddd'
Операции с указателями
Ко всем указателям применимы операции сравнения = и <>.
К типизированным указателям применима операция разыменования ^: если p является указателем на тип T, то p^ - элемент типа T, на который указывает p. Указатели pointer разыменовывать нельзя.
Операции с множествами
К множествам с базовыми элементами одного типа применимы операции + (объединение), - (разность) и * (пересечение), а также операторы +=, -= и *=:
var s1,s2,s: setof byte;
begin
s1 := [1..4];
s2 := [2..5];