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