logand, logandc1, logandc2, logeqv, logior, lognand, lognor, lognot, logorc1, logorc2, logxor | Function |

**Syntax****logand**&rest integers → result-integer**logandc1**integer-1 integer-2 → result-integer**logandc2**integer-1 integer-2 → result-integer**logeqv**&rest integers → result-integer**logior**&rest integers → result-integer**lognand**integer-1 integer-2 → result-integer**lognor**integer-1 integer-2 → result-integer**lognot**integer → result-integer**logorc1**integer-1 integer-2 → result-integer**logorc2**integer-1 integer-2 → result-integer**logxor**&rest integers → result-integer**Arguments and Values**`integers`—*integers*.`integer`— an*integer*.`integer-1`— an*integer*.`integer-2`— an*integer*.`result-integer`— an*integer*.**Description**The

*functions***logandc1**,**logandc2**,**logand**,**logeqv**,**logior**,**lognand**,**lognor**,**lognot**,**logorc1**,**logorc2**, and**logxor**perform bit-wise logical operations on their*arguments*, that are treated as if they were binary.Figure 12–18 lists the meaning of each of the

*functions*. Where an ‘identity’ is shown, it indicates the*value**yielded*by the*function*when no*arguments*are supplied.**Function****Identity****Operation performed****logandc1**— and complement of `integer-1`with`integer-2`**logandc2**— and `integer-1`with complement of`integer-2`**logand**`-1`

and **logeqv**`-1`

equivalence (exclusive nor) **logior**`0`

inclusive or **lognand**— complement of `integer-1`and`integer-2`**lognor**— complement of `integer-1`or`integer-2`**lognot**— complement **logorc1**— or complement of `integer-1`with`integer-2`**logorc2**— or `integer-1`with complement of`integer-2`**logxor**`0`

exclusive or **Figure 12–18. Bit-wise Logical Operations on Integers**Negative

`integers`are treated as if they were in two’s-complement notation.**Examples**(logior 1 2 4 8) → 15 (logxor 1 3 7 15) → 10 (logeqv) → -1 (logand 16 31) → 16 (lognot 0) → -1 (lognot 1) → -2 (lognot -1) → 0 (lognot (1+ (lognot 1000))) → 999 ;;; In the following example, m is a mask. For each bit in ;;; the mask that is a 1, the corresponding bits in x and y are ;;; exchanged. For each bit in the mask that is a 0, the ;;; corresponding bits of x and y are left unchanged. (flet ((show (m x y) (format t "~%m = #o~6,'0O~%x = #o~6,'0O~%y = #o~6,'0O~%" m x y))) (let ((m #o007750) (x #o452576) (y #o317407)) (show m x y) (let ((z (logand (logxor x y) m))) (setq x (logxor z x)) (setq y (logxor z y)) (show m x y)))) ⊳ m = #o007750 ⊳ x = #o452576 ⊳ y = #o317407 ⊳ ⊳ m = #o007750 ⊳ x = #o457426 ⊳ y = #o312557 → NIL

**Exceptional Situations**Should signal

**type-error**if any argument is not an*integer*.**See Also****Notes**`(logbitp`

returns`k`-1)*true*for all values of`k`.Because the following functions are not associative, they take exactly two arguments rather than any number of arguments.

(lognand

`n1``n2`) ≡ (lognot (logand`n1``n2`)) (lognor`n1``n2`) ≡ (lognot (logior`n1``n2`)) (logandc1`n1``n2`) ≡ (logand (lognot`n1`)`n2`) (logandc2`n1``n2`) ≡ (logand`n1`(lognot`n2`)) (logiorc1`n1``n2`) ≡ (logior (lognot`n1`)`n2`) (logiorc2`n1``n2`) ≡ (logior`n1`(lognot`n2`)) (logbitp`j`(lognot`x`)) ≡ (not (logbitp`j``x`))