Operadores bit a bit en LISP

En este artículo, discutiremos los operadores bit a bit en LISP. Estos operadores se utilizan para realizar la manipulación de bits individuales de un número. La tabla de verdad para AND bit a bit , NAND , OR , XOR , NOR y XNOR

a b a y B  a y b a o B  a x o b  a ni b  a xnor b
0 0 0 1 0 0 1 1
0 1 0 1 1 1 0 0
1 1 1 0 1 0 0 1
1 0 0 1 1 1 0 0

Los diferentes operadores bit a bit en LISP se enumeran a continuación en forma tabular

Operador Sintaxis Descripción
registro (logand num1 num2) El operador devuelve AND lógico bit a bit de dos números 
logior (logior num1 num2) El operador devuelve OR inclusivo bit a bit de dos números
registro (logxor num1 num2) El operador devuelve OR exclusivo bit a bit de dos números
lognor (lognor num1 num2) El operador devuelve bit a bit NO de dos números
logeqv (logeqv num1 num2) El operador devuelve NOR exclusivo bit a bit de dos números
conteo de registros (recuento de registros num1) El operador devuelve el número de unos en la representación binaria del entero

 Entendamos cada operador uno por uno.

  • logand : toma dos números como operandos y hace AND lógico en cada bit de dos números y lo devuelve, si no se dan operandos, el resultado es -1
a = 5 = 0101 (In Binary)
b = 7 = 0111 (In Binary)

logand Operation of 5 and 7
    0101
    0111
 ________
=    0101  = 5 (In decimal) 

Lisp

;set value of variable val1 to 5
(setq val1 5)
;set value of variable val2 to 7
(setq val2 7)
  
;; logand operator
(print (logand val1 val2))
  • logior: el operador devuelve OR inclusivo bit a bit de los argumentos que se pasan, si solo se pasa un único argumento, devolverá el argumento en sí
a = 5 = 0101 (In Binary)
b = 7 = 0111 (In Binary)

logior Operation of 5 and 7
  0101
  0111
 ________
= 0111  = 7 (In decimal) 

Lisp

;set value of variable val1 to 5
(setq val1 5)
;set value of variable val2 to 7
(setq val2 7)
  
;; logior operator
(print (logior val1 val2))
  • logxor: Devuelve el OR exclusivo bit a bit de sus argumentos, si no se pasan argumentos devuelve 0
a = 5 = 0101 (In Binary)
b = 7 = 0111 (In Binary)

logxor Operation of 5 and 7
  0101
^ 0111
 ________
= 0010  = 2 (In decimal) 

Lisp

;set value of variable val1 to 5
(setq val1 5)
;set value of variable val2 to 7
(setq val2 7)
  
;; logxor operator
(print (logxor val1 val2))
  • lognor: el operador devuelve bit a bit NO de sus argumentos, si no se pasan argumentos devuelve -1
a = 5 = 0101 (In Binary)
b = 7 = 0111 (In Binary)

lognor Operation of 5 and 7

    0101
    0111
_________    
= -(1000) = -8 in decimal    

Lisp

;set value of variable val1 to 5
(setq val1 5)
;set value of variable val2 to 7
(setq val2 7)
  
;; lognor operator
(print (lognor val1 val2))
  • logeqv: el operador toma dos argumentos y no excluye ni (es decir, equivalencia lógica) de esos argumentos, si no se dan argumentos, devuelve -1
a = 5 = 0101 (In Binary)
b = 7 = 0111 (In Binary)

logeqv Operation of 5 and 7
  0101
  0111
 ________
= 1101         XNOR is just inversion of XOR

Lisp

;set value of variable val1 to 5
(setq val1 5)
;set value of variable val2 to 7
(setq val2 7)
  
;; logeqv operator
(print (logeqv val1 val2))
  • logcount: el operador cuenta el número de bits en un número entero. Si el número es positivo, se cuentan 1 bit, si es negativo, se cuentan 0 bits en complemento a dos.
a = 7 = 0111 (in Binary)

logcount Operation of 5

= 0111
   ^^^    there are three 1-bits
   
 Hence the logcount of 7 will return 3

Ejemplo:

Lisp

;set value of variable val1 to 7
(setq val1 7)
  
;; logcount operator
(print (logcount val1))

Operadores de turno en LISP

En LISP, para un cambio aritmético, se usa la función ash . Si el conteo es positivo, desplaza los bits a la izquierda, de lo contrario, si el conteo es negativo, realiza el desplazamiento a la derecha.

Syntax :    ash number count

Ejemplo:

sh 10 5;     arithmetic left shift
ash 10 -5;  arithmetic right shift

Lisp

;set value of variable val1 to 10
(setq val1 10)
;set value of variable val2 to 5
(setq val2 5)
  
; arithmetic left shift
(print (ash val1 val2))     
  
; arithmetic right shift 
(print (ash val1 (- val2)))

Producción : 

320
0

Publicación traducida automáticamente

Artículo escrito por aniruddhashriwant y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *