¿Cuál es el significado de realizar operaciones lógicas en dos números?

0

Si vamos a considerar dos valores booleanos, las operaciones lógicas en ellos tienen mucho sentido. Pero, ¿qué significaría realizar la operación AND / OR / XOR en dos números binarios?

Estoy aprendiendo programación de nivel de ensamblaje (en ARM7) y escribiría un código simple que realiza operaciones lógicas como AND, OR, XOR en dos valores hexadecimales.

EDITAR: Mi pregunta no es sobre el procedimiento para realizar tales operaciones con números. Me preocupa la implicación lógica de tales operaciones. Encontré un bloque de código que intercambia el valor de dos registros sin involucrar al tercer registro o memoria. El algoritmo era realizar una operación XOR en los números. A (XOR) B = A'B + AB ', ¿Cuál es realmente el significado de A '? Si A fuera un valor booleano 0 o 1, A 'habría sido 1 o 0 respectivamente. No entiendo cómo puedo extender la misma lógica para dos números.

    
pregunta Aditya Patil

4 respuestas

3

Cuando se habla de operaciones lógicas en dos números, dos tipos diferentes de operaciones podrían ser el caso:
1) La operación más común de un bit a bit entre dos números, que, como es de esperar, conozca, representada por bits (ceros y unos). Dados dos números, representados con 8 bits cada uno, por ejemplo, el operador lógico a nivel de bits realizará la operación lógica entre los dos bits correspondientes de los operandos, colocando el bit resultante en el lugar correspondiente en el resultado. (Por ejemplo, la operación AND de los terceros bits dará como resultado el tercer bit).
2) Menos comunes son los operadores de reducción , que realizarán operaciones lógicas en los bits del mismo , reduciendo el resultado a un bit. Es decir. realizar la reducción Y en un número se realizará Y entre todos sus bits y devolverá el único bit resultante.

Actualizaciones: La respuesta para tu pregunta actualizada:

Para intercambiar dos variables booleanas A y B, podríamos realizar la siguiente operación:

A <- A xor B 
B <- A xor B
A <- A xor B 

Aquí, si denotamos por A' y B' los valores originales de A an B (tenga en cuenta que no estoy usando ' como NO, solo es una indicación para diferenciar dos variables ) Las líneas se convertirán en:

A = A' xor B'
B = (A' xor B') xor B' = A'
A = (A' xor B') xor B =  (A' xor B') xor A' = B'

Y así se intercambian los valores. Si extendemos lo mismo a A y B que contienen más de un bit, se realizará la misma operación en cada bit (en forma de columna en sus términos), intercambiando efectivamente los valores de los números enteros.

    
respondido por el Eugene Sh.
2

Al realizar un NOT en un solo valor booleano, entonces está en lo correcto al señalar que es una inversión del valor.

A  = 1
A' = 0

Cuando A está representado por más de un bit, entonces todos los bits en A NO serán separados de forma independiente.

A  = 00110101
A' = 11001010

La representación de binario en hexadecimal nos permite acortar la forma en que se representan estos números. Así que en el caso de A arriba:

A  =    0011 0101
A  = 0x 3    5
A' =    1100 1010
A' = 0x C    A

Entonces, cuando A = 0x35, A '= 0xCA.

Lo mismo se aplica a AND, OR y a los otros operadores bitwise.

A = 1
B = 0

A AND B = 0
A OR  B = 1

A = 0110 = 0x6 
B = 1101 = 0xD

A AND B = 0100 = 0x8
A OR B  = 1111 = 0xF
    
respondido por el stanri
0

Realizar operaciones lógicas en cualquier número sigue el mismo proceso que realizar una operación lógica en dos bits individuales. Por ejemplo: para realizar una operación AND en 0Ah ( 00001010b ) y F2h ( 11110010b ), Y los bits individuales se colocan en una respuesta final de 02h ( 00000010b ).

    
respondido por el Xhale Minion
0

En aras de la simplicidad, supongamos que los números binarios son valores de bytes (8 bits).

Para realizar un AND / OR / XOR entre dos si estos números de byte significa aplicar cada bit de los ocho individualmente. Por lo tanto, si tuviéramos que hacer C = A y B, tendría c.7 = a.7 Y b.7. Del mismo modo, todos los otros bits hasta c.0 = a.0 AND b.0.

Realizar operaciones de grupo de bits como esta puede ser extremadamente útil en algoritmos de software de computadora. En algunos casos, permite que se realicen operaciones lógicas paralelas en muchos bits a la vez sin tener que devolver la cadena de bits a lo largo de hacer uno a la vez. En otros casos, los números sobre los que se actúa pueden utilizarse en un cálculo más complejo y es posible que sea necesario manipular valores de bits específicos. Un buen ejemplo de esto es el cálculo de un código de verificación de errores CRC.

Cuando dijo en su pregunta que deseaba realizar operaciones lógicas en dos valores HEX, esto apunta a una confusión común creada por los programadores principiantes. Hay diferencias distintivas en lo que pueden significar los números "HEX" en diferentes contextos. Un contexto es en el nivel binario básico, donde la notación hexadecimal se utiliza como un medio para compactar la forma de expresar valores binarios. En este caso, en el momento en que un programa se reduzca a su lenguaje de máquina equivalente a ingresar a la computadora, los números están en formato binario. Otro contexto es que el programa en funcionamiento puede estar operando directamente en valores que se almacenan como números HEX, de modo que se está procesando algún texto donde los datos contienen caracteres almacenados de 0-9A-F.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas