LISP - Operadores bit a bit

Los operadores bit a bit trabajan en bits y realizan operaciones bit a bit. Las tablas de verdad para operaciones bit a bit and, or y xor son las siguientes:

pags q p y q po q p xo q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
Assume if A = 60; and B = 13; now in binary format they will be as follows:
A = 0011 1100
B = 0000 1101
-----------------
A and B = 0000 1100
A or B = 0011 1101
A xor B = 0011 0001
not A  = 1100 0011

Los operadores Bitwise admitidos por LISP se enumeran en la siguiente tabla. Suponga que la variable A tiene 60 y la variable B tiene 13, entonces -

Operador Descripción Ejemplo
logand Esto devuelve el AND lógico bit a bit de sus argumentos. Si no se proporciona ningún argumento, el resultado es -1, que es una identidad para esta operación. (logand ab)) dará 12
logior Esto devuelve el OR INCLUSIVO lógico bit a bit de sus argumentos. Si no se proporciona ningún argumento, el resultado es cero, que es una identidad para esta operación. (logior ab) dará 61
logxor Esto devuelve el OR EXCLUSIVO lógico bit a bit de sus argumentos. Si no se proporciona ningún argumento, el resultado es cero, que es una identidad para esta operación. (logxor ab) dará 49
lognor Esto devuelve el NO bit a bit de sus argumentos. Si no se proporciona ningún argumento, el resultado es -1, que es una identidad para esta operación. (lognor ab) dará -62,
logeqv Esto devuelve la EQUIVALENCIA lógica bit a bit (también conocida como exclusiva ni) de sus argumentos. Si no se proporciona ningún argumento, el resultado es -1, que es una identidad para esta operación. (logeqv ab) dará -50

Ejemplo

Cree un nuevo archivo de código fuente llamado main.lisp y escriba el siguiente código en él.

(setq a 60)
(setq b 13)

(format t "~% BITWISE AND of a and b is ~a" (logand a b))
(format t "~% BITWISE INCLUSIVE OR of a and b is ~a" (logior a b))
(format t "~% BITWISE EXCLUSIVE OR of a and b is ~a" (logxor a b))
(format t "~% A NOT B is ~a" (lognor a b))
(format t "~% A EQUIVALANCE B is ~a" (logeqv a b))

(terpri)
(terpri)

(setq a 10)
(setq b 0)
(setq c 30)
(setq d 40)

(format t "~% Result of bitwise and operation on 10, 0, 30, 40 is ~a" (logand a b c d))
(format t "~% Result of bitwise or operation on 10, 0, 30, 40 is ~a" (logior a b c d))
(format t "~% Result of bitwise xor operation on 10, 0, 30, 40 is ~a" (logxor a b c d))
(format t "~% Result of bitwise eqivalance operation on 10, 0, 30, 40 is ~a" (logeqv a b c d))

Cuando hace clic en el botón Ejecutar, o escribe Ctrl + E, LISP lo ejecuta inmediatamente y el resultado devuelto es:

BITWISE AND of a and b is 12
BITWISE INCLUSIVE OR of a and b is 61
BITWISE EXCLUSIVE OR of a and b is 49
A NOT B is -62
A EQUIVALANCE B is -50

Result of bitwise and operation on 10, 0, 30, 40 is 0
Result of bitwise or operation on 10, 0, 30, 40 is 62
Result of bitwise xor operation on 10, 0, 30, 40 is 60
Result of bitwise eqivalance operation on 10, 0, 30, 40 is -61