Tutoriales

Operaciones binarias: cómo funcionan en los ordenadores

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.

Conversión entre decimal y binario

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…

De decimal a binario

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:

  • 13÷2=6 (cociente), resto: 1
  • 6÷2=3 (cociente), resto: 0
  • 3÷2=1 (cociente), resto: 1
  • 1÷2=0 (cociente), resto: 1

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.

De binario a decimal

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:

  • 1⋅23+1⋅22+0⋅21+1⋅2=
  • 1⋅8=8
  • 1⋅4=4
  • 0⋅2=0
  • 1⋅1=1
  • Suma los valores: Σ = 8+4+0+1=138+4+0+1=13

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

Operaciones aritméticas

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:

Suma y resta binaria

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:

  • 0+0=0
  • 0+1=1
  • 1+0=1
  • 1+1=10, pero se pone 0 y nos llevamos 1 (carry), y se llevará a sumar al siguiente como se hace en decimal cuando sumamos por ejemplo 9+1, que es 10, pero ponemos 0 y el 1 se lo sumamos a la siguiente columna…

Por ejemplo:

  • 1011+1101=
  • Comenzando por la columna de derecha a izquierda:
  • 1+1=0 y me llevo 1
  • 1+0=1, pero como me llevé una en el anterior, 1+1=0, es decir, escribo 0 y me llevo 1
  • 0+1=1, pero como me llevé una del anterior, 1+1=0, y me llevo 1 otra vez.
  • 1+1=10, aquí sí ponemos 10, puesto que es la última columna, ya no nos tenemos que llevar. Pero como nos llevábamos una de la anterior columna, sería 10+1=11. Si piensas en decimal, ten en cuenta que 10 es 2, y sumando uno a 2 tenemos un 3, que corresponde a 11 en binario…

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:

  • 0-0=0
  • 1-0=1
  • 1-1=0
  • 0-1=1 y tomo prestado 1 del bit siguiente (borrow)

Por tanto, con un ejemplo práctico, tenemos que:

  • 1101 – 1010 =
  • De derecha a izquierda:
  • 1-0=1
  • 0-1=1 y tomo prestado 1.
  • 1-0=1, pero con el prestado anterior es igual a 0.
  • 1-1=0

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

Multiplicación y división binaria

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:

  • 0×0=0
  • 0×1=0
  • 1×0=0
  • 1×1=1

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:

  • Restar el divisor al dividendo mientras el dividendo sea mayor o igual al divisor.
  • Cada resta válida cuenta como un 1 en el cociente.
  • Si no se puede restar (el divisor es mayor que el dividendo actual), se coloca un 0 en el cociente.
  • El resto es el valor que queda al finalizar.

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:

  • Tomamos los dos primeros bits de 1011, es decir, 10 y los dos del divisor 10: 10≥10. Por lo tanto, la primera parte del cociente es 1.
  • Restamos 10-10=00.
  • Bajamos el siguiente bit del dividendo (1). Ahora tenemos que 1 es menor que 10, por lo tanto, el cociente en esta posición es 0.
  • Bajamos el siguiente y tenemos 11 entre 10, como 11 es mayor que 10, en este caso ponemos 1 y como 11-10=1, el resto es 1.

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…

Complemento a 1 y Complemento a 2

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.

Operaciones lógicas binarias

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:

Operación NOT (Negación)

La operación NOT invierte cada bit del número. Por tanto, A y B quedarían como 0101 y 0011 respectivamente.

Operación OR (O Inclusiva)

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:

  • Columna 1: 1 OR 1=1
  • Columna 2: 0 OR 1=1
  • Columna 3: 1 OR 0=1
  • Columna 4: 0 OR 0=0

El resultado es 1110.

Operación AND (Y)

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:

  • Columna 1: 1 AND 1=1
  • Columna 2: 0 AND 1=0
  • Columna 3: 1 AND 0=0
  • Columna 4: 0 AND 0=0

En este caso tenemos el resultado 1000.

Operación NAND (No Y)

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.

Operación NOR (No O)

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.

Operación XOR (O Exclusiva)

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:

  • Columna 1: 1 XOR 1=0
  • Columna 2: 0 XOR 1=1
  • Columna 3: 1 XOR 0=1
  • Columna 4: 0 XOR 0=0

El resultado sería 0110.

Operación XNOR (O Exclusiva Negada)

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.

¿Y esto para que c******* sirve en un ordenador?

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:

  • Suma: puede usarse por ejemplo para incrementar valores y actualizar la posición en un videojuego, entre otros usos.
MOV AX, 101B ; Cargar 5 en binario en AX
ADD AX, 11B ; Se suma 3 binario a AX y da como resultado 8
  • Resta: por ejemplo, para calcular diferencias, como el tiempo restante en un temporizador. Por ejemplo, imagina una cuenta atrás de 10 a 0.
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...
  • Multiplicación: escalar valores, como duplicar una coordenada en gráficos, y otras situaciones…
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
  • División: calcular proporciones, como dividir recursos en un videojuego, entre otras muchas cosas.
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
  • NOT: invertir un conjunto de bits, como activar señales en un hardware o banderas.
MOV AL, 1010B ; Cargamos el binario 1010.
NOT AL ; Se invierte el binario y sería 0101
  • OR: un ejemplo de uso es activar bits específicos, como encender múltiples LED en paralelo.
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
  • AND: filtrar bits, como comprobar permisos en sistemas.
MOV AL, 1010B ; Se carga el binario 1010
AND AL, 1100B ; Se aplica un 1010 AND 1100 y el resultado es 1000
  • NAND: verificar desigualdad lógica.
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
  • NOR: por ejemplo, para indicar ausencia de señales, como apagar múltiples banderas.
MOV AL, 1010B ; Nuevamente cargamos 1010 en el registro AL
OR AL, 1100B ; 1010 OR 1100 = 1110
NOT AL ; AL = NOT AL = 0001
  • XOR: por ejemplo, para detectar cambios o diferencias, como comparar valores de entrada.
MOV AL, 1010B ; Cargar 1010
XOR AL, 1100B ; 1010 XOR 1100 = 0110
  • XNOR: verificar igualdad, como validar configuraciones binarias, o para temas de seguridad.
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…

Recent Posts

  • Tarjetas gráficas

AMD RX 9070 XT: Filtran el rendimiento con Cyberpunk 2077 y Black Myth Wukong

Se filtra el rendimiento de la tarjeta gráfica AMD Radeon RX 9070 XT con Cyberpunk…

41 mins atrás
  • Portátiles y ordenadores

Tiene nombre de villano de una serie, pero es el nuevo PC Gaming de MSI: así es «Project Zero X»

El CES 2025 nos está dejando grandes anuncios de tecnología, y el nuevo PC Gaming…

56 mins atrás
  • Procesadores

Intel Core i9-14900KF: Logran el récord mundial de overclocking con 9,12 GHz

El overclocker Wytiwx ha tomado el Intel Core i9-14900KF para lograr un récord mundial de…

2 horas atrás