LISP - Operadores Bitwise

Operadores bit a bit trabalham em bits e executam operações bit a bit. As tabelas de verdade para operações bit a bit and, or, e xor são as seguintes -

p q p e q p ou q p xor 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

Os operadores bit a bit suportados pelo LISP estão listados na tabela a seguir. Suponha que a variável A tenha 60 e a variável B tenha 13, então -

Operador Descrição Exemplo
logand Isso retorna o AND lógico bit a bit de seus argumentos. Se nenhum argumento for fornecido, o resultado será -1, que é uma identidade para esta operação. (log e ab)) dará 12
logior Isso retorna o OR INCLUSIVE lógico bit a bit de seus argumentos. Se nenhum argumento for fornecido, o resultado será zero, que é uma identidade para esta operação. (logior ab) dará 61
logxor Isso retorna o OR EXCLUSIVO lógico bit a bit de seus argumentos. Se nenhum argumento for fornecido, o resultado será zero, que é uma identidade para esta operação. (logxor ab) dará 49
Lognor Isso retorna o NOT bit a bit de seus argumentos. Se nenhum argumento for fornecido, o resultado será -1, que é uma identidade para esta operação. (lognor ab) dará -62,
logeqv Isso retorna a EQUIVALÊNCIA lógica bit a bit (também conhecida como nor exclusiva) de seus argumentos. Se nenhum argumento for fornecido, o resultado será -1, que é uma identidade para esta operação. (logeqv ab) dará -50

Exemplo

Crie um novo arquivo de código-fonte denominado main.lisp e digite o seguinte código nele.

(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))

Quando você clica no botão Executar, ou digita Ctrl + E, o LISP executa imediatamente e o resultado retornado é -

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