Para LOGAND transcribimos la explicación de Jon Fleming
* en el mismo hilo de discusión donde fué
expuesta la explicación anterior de Reini Urban:
(logand 13 22)
es el AND lógico de
[8 + 4 + 1] con [16 + 4 + 2] o, escribiendo los
números en binario, de 00001101 con 00010110.
Escribiendo los números uno sobre el otro, podemos entonces escribir
la respuesta en binario de inmediato, escribiendo un 1 bajo dos
números uno y un 0 en cualquier otro lugar:
13 = 00001101
22 = 00010110
13 y 22 = 00000100
es decir, 4 en notación decimal. Por lo tanto, (logand 13 22)
devuelve 4. El AND lógico se suele utilizar como filtro.
Uno de los números que definimos contendrá un 1 en su
representación binaria dondequiera que deseamos que un posible 1
en un número desconocido pase por el filtro. Esto se debe a que un
entero es un lugar muy eficiente para guardar varios valores lógicos
verdadero/falso relacionados como unos y ceros en posiciones definidas en la
representación binaria de un entero.
Un ejemplo perfecto lo constituye la variable de sistema OSMODE.
¿Queremos saber si la referencia a objeto INTERSECCIÓN se encuentra
activa? Nuestra referencia de comandos nos dice que la presencia de 32
en el valor de OSMODE indica la referencia INTERSECCIÓN. Como
sólo nos interesa la referencia INTERSECCIÓN, escribimos la
representación binaria de OSMODE con "x" en las posiciones que
no interesa comprobar: El valor de OSMODE podría ser:
xxxxxx1xxxxx
o: xxxxxx0xxxxx
Así que si pasamos a (logand ...) cualquiera de esos valores
con 0000 0010 0000 que es 32 en base 10, obtenemos,
ya sea 32 (si está activa la referencia INTERSECCIÓN) o
0 (cero) si no lo está. En otras palabras:
(if (logand 32 (getvar "OSMODE"))
(prompt "\nLa referencia INTERSECCIÓN está ACTIVA")
(prompt "\nLa referencia INTERSECCIÓN NO está ACTIVA")
)
Utilizando las funciones LSH, ~ y LOGAND pudiéramos desarrollar
funciones para la conversión de decimales en binarios y viceversa,
útiles al menos para comprender mejor la operación de estas
funciones binarias. Este será el tema de la próxima
sección.
Los ejemplos de LOGAND en los programas LISP que vienen con AutoCAD
sí son numerosos. Podemos enumerar para la versión 14:
BMAKE.LSP,
DDATTDEF.LSP,
DDGRIPS.LSP,
ATTREDEF.LSP,
DDCHPROP.LSP,
DDCOLOR.LSP,
DDINSERT.LSP,
DDMODIFY.LSP,
DDPTYPE.LSP,
DDSELECT.LSP,
DDUNITS.LSP,
DDVIEW.LSP, 3D.LSP, EDGE.LSP, MVSETUP.LSP,
BLK_LST.LSP,
COUNT.LSP, LMAN.LSP,
TREXBLK.LSP,
CLIPIT.LSP,
EXCHPROP.LSP,
EXTRIM.LSP,
XPLODE.LSP,
CURSDLG.LSP,
SQLEDDLG.LSP.
Mucchos de estos programas ya aparecían en la versión 13. Para
indicar alguno de aquella versión que ha desaparecido desde entonces
podemos mencionar DDOSNAP.LSP.
Enumerando sólo algunos de la versión 12 tendríamos:
CHELEV.LSP,
MAKE2D.LSP,
MAKE3D.LSP,
PTEXT.LSP, CL.LSP y PROJECT.LSP, y de la versión 10
TABLES.LSP, lo que nos puede dar una idea
de lo útil que resulta esta función.
* De: Jon Fleming <jonf@fleming-group.com>
Newsgroup: autodesk.autocad.customization
Asunto: Logand, logior, lsh, etc...
Fecha: Jueves, 26 Feb 1998 20:35:37 EST
Organización: The Fleming Group
Traducción del inglés: Reinaldo Togores