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