Функции описанные в данном разделе работают только с массивами битов, то есть, со специализированными массивами, элементы которых могут принимать значения только либо 0, либо 1.
Функция bit похожа на aref, но принимает только массив битов, то есть массив типа (array bit). Результатом всегда является 0 или 1. sbit похожа на bit, но дополнительно требует, чтобы первый аргумент был простым массивом (смотрите раздел 2.5). Следует отметить, что bit и sbit, в отличие от char и schar, могут принимать массив любого ранга.
Для замены элемента массива может использоваться setf в связке с bit или sbit.
bit и sbit идентичны aref за исключением того, что принимают только специализированные массивы. В некоторых реализациях Common Lisp’а bit и sbit могут быть быстрее чем aref в тех случаях, где они применимы.
[Функция]
bit-and bit-array1 bit-array2 &optional result-bit-arrayЭти функции выполняют побитовые логические операции над битовыми массивами. Все аргументы для этих функций должны быть битовыми массивами одинакового ранга и измерений. Результат является битовым массивом с такими же рангом и измерениями, что и аргументами. Каждый бит получается применением соответствующей операции к битам исходных массивов.
Если третий аргумент опущен или является nil, создаётся новый массив, который будет содержать результат. Если третий аргумент это битовый массив, то результат помещается в этот массив. Если третий аргумент является t, тогда для третьего аргумента используется первый массив. Таким образом результат помещается в массив переданный первым аргументом.
Следующая таблица отображает результаты применения битовых операций.
argument1 | 0 | 0 | 1 | 1 | |
argument2 | 0 | 1 | 0 | 1 | Имя операции |
bit-and | 0 | 0 | 0 | 1 | и |
bit-ior | 0 | 1 | 1 | 1 | или |
bit-xor | 0 | 1 | 1 | 0 | исключающее или |
bit-eqv | 1 | 0 | 0 | 1 | равенство (исключающее не-или) |
bit-nand | 1 | 1 | 1 | 0 | не-и |
bit-nor | 1 | 0 | 0 | 0 | не-или |
bit-andc1 | 0 | 1 | 0 | 0 | не-argument1 и argument2 |
bit-andc2 | 0 | 0 | 1 | 0 | argument1 и не-argument2 |
bit-orc1 | 1 | 1 | 0 | 1 | не-argument1 или argument2 |
bit-orc2 | 1 | 0 | 1 | 1 | argument1 или не-argument2 |
Например:
Смотрите также logand и связанные с ней функции.
Первый аргумент должен быть массивом битов. Результатом является битовый массив с таким же рангом и измерениями и инвертированными битами. Смотрите также lognot.
Если второй аргумент опущен или равен nil, для результата создаётся новый массив. Если второй аргумент является битовым массивом, результат помещается в него. Если второй аргумент является t, то для результата используется массив из первого аргумента. То есть результат помещается в исходный массив.