17.4 Функции для битовых массивов

Функции описанные в данном разделе работают только с массивами битов, то есть, со специализированными массивами, элементы которых могут принимать значения только либо 0, либо 1.

[Функция] bit bit-array &rest subscripts
[Функция] sbit simple-bit-array &rest subscripts

Функция 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
[Функция] bit-ior bit-array1 bit-array2 &optional result-bit-array
[Функция] bit-xor bit-array1 bit-array2 &optional result-bit-array
[Функция] bit-eqv bit-array1 bit-array2 &optional result-bit-array
[Функция] bit-nand bit-array1 bit-array2 &optional result-bit-array
[Функция] bit-nor bit-array1 bit-array2 &optional result-bit-array
[Функция] bit-andc1 bit-array1 bit-array2 &optional result-bit-array
[Функция] bit-andc2 bit-array1 bit-array2 &optional result-bit-array
[Функция] bit-orc1 bit-array1 bit-array2 &optional result-bit-array
[Функция] bit-orc2 bit-array1 bit-array2 &optional result-bit-array

Эти функции выполняют побитовые логические операции над битовыми массивами. Все аргументы для этих функций должны быть битовыми массивами одинакового ранга и измерений. Результат является битовым массивом с такими же рангом и измерениями, что и аргументами. Каждый бит получается применением соответствующей операции к битам исходных массивов.

Если третий аргумент опущен или является nil, создаётся новый массив, который будет содержать результат. Если третий аргумент это битовый массив, то результат помещается в этот массив. Если третий аргумент является t, тогда для третьего аргумента используется первый массив. Таким образом результат помещается в массив переданный первым аргументом.

Следующая таблица отображает результаты применения битовых операций.

   argument1   0011
   argument2   0101Имя операции
bit-and  0001и
bit-ior   0 1 1 1 или
bit-xor  0110исключающее или
bit-eqv  1001равенство (исключающее не-или)
bit-nand  1110не-и
bit-nor   1 0 0 0 не-или
bit-andc1  0100не-argument1 и argument2
bit-andc2  0010argument1 и не-argument2
bit-orc1  1101не-argument1 или argument2
bit-orc2  1011argument1 или не-argument2






 

Например:

(bit-and #*1100 #*1010)  #*1000
(bit-xor #*1100 #*1010)  #*0110
(bit-andc1 #*1100 #*1010)  #*0100

Смотрите также logand и связанные с ней функции.


[Функция] bit-not bit-array &optional result-bit-array

Первый аргумент должен быть массивом битов. Результатом является битовый массив с таким же рангом и измерениями и инвертированными битами. Смотрите также lognot.

Если второй аргумент опущен или равен nil, для результата создаётся новый массив. Если второй аргумент является битовым массивом, результат помещается в него. Если второй аргумент является t, то для результата используется массив из первого аргумента. То есть результат помещается в исходный массив.