ToC | DocOverview | CGDoc | RelNotes | Index | PermutedIndex
| Allegro CL

| ANSI Common Lisp 12 Numbers 12.2 Dictionary of Numbers
12.2.62 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. The next figure 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.
  Bit-wise Logical Operations on Integers
  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
  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: boole Notes: `(logbitp k -1)` returns 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))
Allegro CL Implementation Details: None.

© Franz Inc. All Rights Reserved - File last updated 2022-07-25