LISP - Opérateurs au niveau du bit

Les opérateurs au niveau du bit travaillent sur les bits et effectuent des opérations bit par bit. Les tables de vérité pour les opérations binaires et, ou et xor sont les suivantes:

p q p et 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

Les opérateurs Bitwise pris en charge par LISP sont répertoriés dans le tableau suivant. Supposons que la variable A a 60 et la variable B 13, alors -

Opérateur La description Exemple
logand Cela renvoie le ET logique par bit de ses arguments. Si aucun argument n'est donné, le résultat est -1, qui est une identité pour cette opération. (logand ab)) donnera 12
logior Cela renvoie le OU INCLUSIF logique par bit de ses arguments. Si aucun argument n'est donné, le résultat est zéro, qui est une identité pour cette opération. (logior ab) donnera 61
logxor Ceci renvoie le OU EXCLUSIF logique par bit de ses arguments. Si aucun argument n'est donné, le résultat est zéro, qui est une identité pour cette opération. (logxor ab) donnera 49
lognor Cela renvoie le PAS bit par bit de ses arguments. Si aucun argument n'est donné, le résultat est -1, qui est une identité pour cette opération. (lognor ab) donnera -62,
logeqv Cela renvoie l'ÉQUIVALENCE logique bit par bit (également appelée ni exclusif) de ses arguments. Si aucun argument n'est donné, le résultat est -1, qui est une identité pour cette opération. (logeqv ab) donnera -50

Exemple

Créez un nouveau fichier de code source nommé main.lisp et tapez le code suivant dedans.

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

Lorsque vous cliquez sur le bouton Exécuter ou tapez Ctrl + E, LISP l'exécute immédiatement et le résultat renvoyé est -

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