Para el cálculo del valor decimal de un determinado BIT sería más adecuado, como veremos más adelante, utilizar la función LSH. Sgún la explicación de Reini Urban*:
De acuerdo con esto el valor decimal del primer BIT vendría dado por (lsh 1 0) equivalente a 0000 0001 y devolvería el valor decimal 1. Con un desplazamiento de dos a la izquierda obtendríamos 0000 0100 que ya hemos visto que equivale a OSMODE CENtro y (lsh 1 2) devuelve el valor decimal de 4. Con LSH podemos diseñar la función utilitaria siguiente, que nos devuelve el valor decimal de cualquier BIT:
De manera que (bit 1) devolvería 1, (bit 5) devolvería 16, etc. Con lo que tenemos una manera sencilla de dar el valor decimal que corresponde a la posición de cualquier bit. Activar el bit 8 (referencia PERpendicular) significaría sumar (bit 8) al valor actual de OSMODE:
Claro que sería lo mismo
e incluso:
Pero (bit 8) resulta más fácil de memorizar y seguramente más claro en cuanto a la intención del programador. Debo advertir que la cosa no es tan sencilla, pues debemos primero haber comprobado que el bit 8 no estaba ya activado. Más adelante veremos cómo hacerlo valiéndonos de los operadores LOGAND y LOGIOR. Pero si continuamos incrementando los valores que pasamos a la función BIT, descubriremos que hay un límite: Como se puede ver, cuando se activa el bit 32 (en un sistema operativo de 32
bits) es decir, cuando la última posición a la izquierda de la
palabra toma el valor de 1, su signo pasa a negativo y un nuevo desplazamiento
a la izquierda devolvería de nuevo el valor del primer bit.
En AutoCAD 2000 obtendríamos como resultado:
Es inportante tener esto en cuenta para comprender el funcionamiento del próximo operador a estudiar, el NOT lógico binario (~ num). * De: Reini Urban <rurban@sbox.tu-graz.ac.at> |
AutoCAD: Visual LISP > Apuntes para un Curso... > Programación de Aplicaciones Gráficas > 2. Técnicas Fundamentales > 2.3. Estructuras de Control > 2.3.4. Operadores Lógicos Binarios >