Los ordenadores trabajan con electrónica basada en la lógica binaria, como bien sabes. Básicamente un ordenador no es más que una potente calculadora, pero cuyos resultados sirven para multitud de aplicaciones, desde mostrar imagen en pantalla, hasta reproducir un audio, pasando por otras muchas tareas. Aquí aprenderás cuáles son esas operaciones matemáticas y cómo se hacen.
Índice de contenidos
En el mundo real nos movemos con el sistema decimal para todo, ya sea para expresar valores, como para calificar, etc. Sin embargo, la electrónica digital, como su propio nombre indica, trabaja con unos y ceros. Por eso, empezaré explicando cómo convertir de un sistema, en este caso el que usamos los humanos, al sistema que usan las máquinas o viceversa…
El sistema decimal (base 10) utiliza los dígitos del 0 al 9, mientras que el binario (base 2) utiliza solo los dígitos 0 y 1. Para convertir un número decimal a binario, se sigue el proceso de división sucesiva entre 2 y se registran los restos. Es decir, por ejemplo, para convertir el número 13 decimal en binario, tienes que hacer las siguientes operaciones:
Ahora solo es cuestión de unir los restos de las divisiones, pero del revés, comenzando por el último. Por tanto, el 13 decimal en binario sería 1101. Dicho de otro modo, mientras en decimal contamos 0, 1, 2, 3, 4, 5, 6,7, 8, 9, 10, 11, 12, y 13, en el caso del binario tendríamos 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, y 1101.
Para convertir un número binario a decimal, se usa la suma de potencias de 2, donde cada dígito binario representa 2n2n, siendo nn la posición del dígito contando desde 0 (de derecha a izquierda). Así puede sonar algo extraño, pero lo vemos con un fácil ejemplo. Imagina que se quiere convertir el número binario 1101 a decimal:
Como era de esperar, el número es el 13 en decimal, ya que he usado el mismo que en el ejemplo anterior.
También te puede interesar conocer qué son las puertas lógicas
Comenzamos con las operaciones aritméticas, es decir, las más elementales que se pueden hacer en binario, y que usamos en decimal de forma bastante frecuente:
El sistema binario funciona con reglas simples debido a que solo usa los dígitos 0 y 1. A continuación, veremos cómo realizar sumas y restas binarias de forma simple. Comenzando con la suma, lo único que hay que hacer es lo mismo que harías para un número decimal, solo teniendo una consideración, y es:
Por ejemplo:
Ahora bien, en cuanto a la resta binaria, también sería algo parecido a la resta decimal, pero en este caso tenemos que tener en cuenta que:
Por tanto, con un ejemplo práctico, tenemos que:
Por tanto, el resultado es 0011, es decir, 11. Algo que es lo esperado, ya que si convertimos 1101 y 1010 a decimal, vemos que es 13-10=3. Y 3 como ya dije antes es 11 en binario…
Te recomiendo leer sobre el álgebra de Boole
Ahora vamos con la multiplicación y división binaria, comenzando primero por la multiplicación, explicada de forma sencilla. Como antes, las reglas básicas para este caso son:
Vamos con un ejemplo en el que multiplicamos 101 (5 en decimal) por 11 (3 en decimal), y que debería de dar 15, en binario 1111. Veremos ahora cómo se llega a esa cifra, multiplicando como harías con valores decimales:
101
× 11
——–
101 (101 × 1, sin desplazamiento)
+ 1010 (101 × 1, desplazado una posición)
——–
1111
Una vez explicada la multiplicación, vamos con la división, que sigue un proceso similar al de la división larga en decimal, pero usando restas binarias. Como las restas ya las has visto antes, no debería suponer un problema. Simplemente aplicar esto:
Por ejemplo, para verlo de forma más sencilla. Vamos a dividir 1011÷10, es decir, 11 entre 2 en decimal… lo que debería ser igual a 5 y con un resto igual a 1. Pero vamos a verlo en binario cómo sería:
El resultado final es 101 y con un resto 1, es decir, tenemos que 11/2 es igual a 5 como se esperaba, y con un resto 1…
El complemento a 1 y el complemento a 2 son sistemas de representación de números binarios que permiten codificar tanto números positivos como negativos en un mismo formato. Esto es fundamental en la aritmética, e incluso nos podría ayudar a realizar las anteriores operaciones en caso de trabajar con números negativos. Ya que hemos asumido en los anteriores ejemplos que lo hacemos siempre con positivos.
Comenzando por el complemento a 1 de un número binario, se obtiene invirtiendo todos los bits del número. Esto significa cambiar los 0 por 1 y los 1 por 0. Es decir, es como aplicar una puerta NOT a un valor binario. Por ejemplo, si queremos complementar 0101 (5 en decimal), el resultado sería 1010. Así de simple…
Para calcular el complemento a 2, se obtiene sumando 1 al complemento a 1 de un número. Es ampliamente utilizado porque permite representar números negativos de forma única y simplifica las operaciones aritméticas. Por ejemplo, si queremos hacer lo mismo con el caso anterior, el 0101, primero lo pasamos a C1, que sería 1010 y luego 1010+1=1011 para obtener su C2.
Por otro lado tenemos las operaciones lógicas, y que en este caso son exclusivas para el sistema binario:
Para más información sobre las operaciones lógicas, puedes ver este artículo
Para este ejemplo, tomaremos 1010 como Número A, y usaremos un segundo número, 1100, como Número B, para las operaciones binarias:
La operación NOT invierte cada bit del número. Por tanto, A y B quedarían como 0101 y 0011 respectivamente.
La operación OR compara cada bit de A y B. La salida es 1 si al menos uno de los bits es 1. En este caso, vamos columna a columna para estos dos números, comparando los bits:
El resultado es 1110.
La operación AND compara cada bit de A y B. La salida es 1 solo si ambos bits son 1. Por ejemplo, en este caso tendríamos:
En este caso tenemos el resultado 1000.
La operación NAND es la negación de la operación AND. Es 1 si al menos uno de los bits no es 1. En nuestro ejemplo tenemos que aplicar primero una AND a nuestros números, cuyo resultado es 1000 y luego una NOT a este resultado, obteniendo finalmente 0111.
La operación NOR es la negación de la operación OR. Es 1 solo si ambos bits son 0. Se puede realizar también aplicando primero una OR a A y B y luego una NOT al resultado obtenido. Es decir, en este caso tendríamos 1110 usando OR y luego NOT para obtener el resultado final que es 0001.
La operación XOR es 1 solo si los bits son diferentes. Por tanto, aplicando esto a nuestros números A y B del ejemplo, tenemos:
El resultado sería 0110.
La operación XNOR es la negación de XOR. Es 1 solo si los bits son iguales. Por tanto, igual que con NOR y NAND, podemos aplicar primero una XOR y luego negar con NOT. Es decir, A XOR B sería 0110 y NOT 0110 sería 1001.
Pues bien, si te estás preguntando esto, voy a tratar de poner algunos ejemplos. Y para ello nos centraremos en la CPU, y en su ALU o unidad Aritmético-Lógica, que se encarga de realizar cálculos binarios según las instrucciones que le llegan:
MOV AX, 101B ; Cargar 5 en binario en AX ADD AX, 11B ; Se suma 3 binario a AX y da como resultado 8
MOV AX, 1010B ; Cargar 10 binario en AX SUB AX, 1B ; Se resta 1 y el resultado es 9. Primer paso de la cuenta atrás...
MOV AX, 10B ; Cargar 2 en binario en AX MOV BX, 11B ; Cargar 3 en binario en BX MUL BX ; Multiplica los dos valores anteriores y el resultado se almacena en AX = 6
MOV AX, 1010B ; Cargar 10 en el registro AX MOV BX, 10B ; Cargar 2 en el registro BX DIV BX ; Se dividen ambos valores y el resultado sería almacenado en BX y es 5
MOV AL, 1010B ; Cargamos el binario 1010. NOT AL ; Se invierte el binario y sería 0101
MOV AL, 1010B ; Se carga el binario 1010. OR AL, 1100B ; Se realiza el OR con este otro valor y el resultado sería 1110
MOV AL, 1010B ; Se carga el binario 1010 AND AL, 1100B ; Se aplica un 1010 AND 1100 y el resultado es 1000
MOV AL, 1010B ; Cargamos 1010 AND AL, 1100B ; 1010 AND 1100 = 1000 NOT AL ; Se aplica NOT al registro AL para obtener el resultado 0111
MOV AL, 1010B ; Nuevamente cargamos 1010 en el registro AL OR AL, 1100B ; 1010 OR 1100 = 1110 NOT AL ; AL = NOT AL = 0001
MOV AL, 1010B ; Cargar 1010 XOR AL, 1100B ; 1010 XOR 1100 = 0110
MOV AL, 1010B ; Cargar el binario 1010 en AL XOR AL, 1100B ; 1010 XOR 1100 = 0110 NOT AL ; Invertir AL y el resultado es 1001
Aquí hemos supuesto siempre valores positivos y enteros, pero algo parecido podría aplicarse a nivel de coma flotante para una FPU…
Deja tus comentarios sobre el tema…
Se filtra el rendimiento de la tarjeta gráfica AMD Radeon RX 9070 XT con Cyberpunk…
El CES 2025 nos está dejando grandes anuncios de tecnología, y el nuevo PC Gaming…
El overclocker Wytiwx ha tomado el Intel Core i9-14900KF para lograr un récord mundial de…