Ejercicios Resueltos Arquitectura de Computadores - Parte I

Arquitectura de Computadores
Representación de Números
Operaciones Binarias
2026-01-30
96 min de lectura

Tema 1

Ejercicio 1

Representación del número 61 en binario natural:

📐Demostración

Para pasar el número 61 a binario, basta con dividir sucesivamente por 2 y quedarse con el resto. Así, tenemos:

DivisioˊnResto61÷2=30130÷2=15015÷2=717÷2=313÷2=111÷2=01\begin{array}{r|c} **División** & **Resto**\\ \hline 61 \div 2 = 30 & 1\\ 30 \div 2 = 15 & 0\\ 15 \div 2 = 7 & 1\\ 7 \div 2 = 3 & 1\\ 3 \div 2 = 1 & 1\\ 1 \div 2 = 0 & 1 \end{array}

Basta leer los restos de abajo hacia arriba y tenemos que:

61=111101b\begin{align*} 61 = 11\, 1101_b \end{align*}

Ejercicio 2

Representación del número 61 en hexadecimal:

📐Demostración

Partiendo de que su codificación en binario natural es 11 1101b_b, entonces agrupamos de 4 en 4 y pasamos a hexadecimal:

001131101D    61=3Dh\begin{align*} \underbrace{0011}_{3} \, \underbrace{1101}_{D} \implies 61 = `3D`_h \end{align*}

Ejercicio 3

Representación decimal del número \texttt{11 1100}$_b$:

📐Demostración

Procedemos de forma inversa a la conversión a binario natural es decir, multiplicamos cada bit por la potencia de 2 correspondiente y sumamos. Así, tenemos:

111100b=020+021+122+123+124+125==0+0+4+8+16+32=60\begin{align*} 11\, 1100_b &= 0 \cdot 2^0 + 0 \cdot 2^1 + 1 \cdot 2^2 + 1 \cdot 2^3 + 1 \cdot 2^4 + 1 \cdot 2^5 =\\[2ex] & = 0 + 0 + 4 + 8 + 16 + 32 = 60 \end{align*}

Ejercicio 4

Representación en hexadecimal del número 111 1101 0001b_b:

📐Demostración

Agrupamos de 4 en 4 y pasamos a hexadecimal:

011171101D00011    11111010001b=7D1h\begin{align*} \underbrace{0111}_{7} \, \underbrace{1101}_{D} \, \underbrace{0001}_{1} \implies `111 1101 0001`_b = `7D1`_h \end{align*}

Ejercicio 5

Representación en binario del número 4CEh_h:

📐Demostración

Seguimos el proceso inverso al de pasar de binario a hexadecimal. Así, tenemos:

40100C1100E1110    4CEh=010011001110b\begin{align*} \underbrace{4}_{0100} \, \underbrace{C}_{1100} \, \underbrace{E}_{1110} \implies `4CE`_h = `0100 1100 1110`_b \end{align*}

Ejercicio 6

Representación en binario del número 0.8125:

📐Demostración

Dividimos el número en su parte entera (0)(0) y su parte decimal (0.8125)(0.8125) y procedemos a convertir cada parte por separado. Para la parte entera, basta con convertir el 0 a binario, es decir:

0=0b\begin{align*} 0 = 0_b \end{align*}

Para la parte decimal, multiplicamos por 2 y nos quedamos con la parte entera, así:

MultiplicacioˊnParteentera0.81252=1.62510.6252=1.2510.252=0.500.52=1.01\begin{array}{r|c} **Multiplicación** & **Parte entera**\\ \hline 0.8125 \cdot 2 = 1.625 & 1\\ 0.625 \cdot 2 = 1.25 & 1\\ 0.25 \cdot 2 = 0.5 & 0\\ 0.5 \cdot 2 = 1.0 & 1 \end{array}

Así, tenemos que:

0.8125=0.1101b\begin{align*} 0.8125 = 0.1101_b \end{align*}

Ejercicio 7

Representación decimal de 0.1011 01b_b:

📐Demostración

Procedemos de forma inversa a la conversión a binario natural es decir, multiplicamos cada bit por la potencia de 2 correspondiente y sumamos. Así, tenemos:

101101b=121+022+123+124+025+126==0.5+0+0.125+0.0625+0+0.015625=0.703125\begin{align*} 1011 \, 01_b & = 1 \cdot 2^{ - 1} + 0 \cdot 2^{ - 2} + 1 \cdot 2^{ - 3} + 1 \cdot 2^{ - 4} + 0 \cdot 2^{ - 5} + 1 \cdot 2^{ - 6} =\\[2ex] & = 0.5 + 0 + 0.125 + 0.0625 + 0 + 0.015625 = 0.703125 \end{align*}

Como la parte entera es 0 entonces el número es 0.7031250.703125.

Ejercicio 8

Representación del número 14.375 en binario:

📐Demostración

Primero, codificamos la parte entera:

DivisioˊnResto14÷2=707÷2=313÷2=111÷2=01\begin{array}{r|c} **División** & **Resto**\\ \hline 14 \div 2 = 7 & 0\\ 7 \div 2 = 3 & 1\\ 3 \div 2 = 1 & 1\\ 1 \div 2 = 0 & 1 \end{array}

Y ahora, codificamos la parte decimal:

MultiplicacioˊnParteentera0.3752=0.7500.752=1.510.52=1.01\begin{array}{r|c} **Multiplicación** & **Parte entera**\\ \hline 0.375 \cdot 2 = 0.75 & 0\\ 0.75 \cdot 2 = 1.5 & 1\\ 0.5 \cdot 2 = 1.0 & 1 \end{array}

Entonces, juntando ambas partes tenemos que:

14=1110by0.375=0.011b    14.375=1110.011b\begin{align*} 14 = 1110_b \quad \text{y} \quad 0.375 = 0.011_b \implies 14.375 = 1110.011_b \end{align*}

Ejercicio 9

Suma de los números 0100 0000b_b y 0001 0101b_b:

📐Demostración

Sumamos bit a bit:

01000000+0001010101010101\begin{array}{ccccccccc} & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\ +& 0 & 0 & 0 & 1 & 0 & 1 & 0 & 1\\ \hline & 0 & 1 & 0 & 1 & 0 & 1 & 0 & 1 \end{array}

Por lo tanto, la suma de los dos números es 0101 0101b_b.

Ejercicio 10

¿Cuál es la suma de los números 1 1100 1011b_b y 1 0111 1010b_b:

📐Demostración

Sumamos término a término:

0(1)1(1)1(1)1(1)0(1)0(1)10(1)11+1011110101101000101\begin{array}{cccccccccc} \overset{(1)}{\phantom{0}}& \overset{(1)}{1} & \overset{(1)}{1} & \overset{(1)}{1} & \overset{(1)}{0} & \overset{(1)}{0} & 1 &\overset{(1)}{0}& 1 & 1\\ +& 1 & 0 & 1 & 1 & 1 & 1 & 0& 1 & 0\\ \hline 1& 1 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 \end{array}

Por lo tanto, la suma de los dos números es 110100 0101b_b.

Ejercicio 11

¿Cuál es la suma de los números 1010 0110b_b y 0010 0100b_b:

📐Demostración

Sumamos término a término:

10(1)100(1)110+0010010011001010\begin{array}{ccccccccc} & 1 & \overset{(1)}{0} & 1 & 0 &\overset{(1)}{0} & 1 & 1 & 0\\ +& 0 & 0 & 1 & 0 & 0 & 1 & 0 & 0\\ \hline & 1 & 1 & 0 & 0 & 1 & 0 & 1 & 0 \end{array}

Por lo tanto, la suma de los dos números es 1100 1010b_b.

Ejercicio 12

¿Cuál es el rango de representación con 7 bits usando binario natural? Expresar en decimal

📐Demostración

El rango de representación en binario natural viene dado por:

Rango=[0,2n1]=[0,271]=[0,127]\begin{align*} \text{Rango} = [0, 2^n - 1] = [0, 2^7 - 1] = [0, 127] \end{align*}

Por lo tanto, el rango de representación con 7 bits en binario natural es [0,127][0, 127].

Ejercicio 13

¿Cual es la representación del 3 en signo magnitud con 5 bits?

📐Demostración

Consideramos que el primer bit es el signo y los siguientes 4 bits son la magnitud. Así, tenemos que:

3=0011b\begin{align*} 3 = 0011_b \end{align*}

Entonces, como 3R+3 \in \mathbb{R}^{ + } tenemos que el bit de signo es 0, así que:

3=00011b\begin{align*} 3 = 0\, 0011_b \end{align*}

Ejercicio 14

¿Cual es la representación del -3 en signo magnitud con 5 bits?

📐Demostración

Al igual que antes, la magnitud se codifica como:

3=3=0011b\begin{align*} |- 3| = 3 = 0011_b \end{align*}

Entonces, como en este caso es negativo, el bit de signo es 1 entonces:

3=10011b\begin{align*} - 3 = 1\, 0011_b \end{align*}

Ejercicio 15

¿Cuál es el rango de representación con 7 bits utilizando signo magnitud? Expresar en decimal

📐Demostración

Por un lado, tenemos que la magnitud se expresará con 6 bits ya que uno queda reservado para el signo, así que tenemos que, podemos ver que el rango de la magnitud es:

Rango magnitud=[0,261]=[0,63]\begin{align*} \text{Rango magnitud} = [0, 2^6 - 1] = [0, 63] \end{align*}

Sin embargo, como el bit más significativo determina el signo, tenemos este rango también hacia los negativos, así el rango completo es:

Rango=[63,63]\begin{align*} \text{Rango} = [- 63, 63] \end{align*}

Ejercicio 16

¿Cuál es la representación del 3 en complemento a 2 con 5 bits?

📐Demostración

Para hacer la representación en complemento a 2 podemos seguir dos procedimientos para hacerlo de forma rápida, en este caso, lo representaremos en binario natural:

3=00011b\begin{align*} 3 = 0\, 0011_b \end{align*}

Y a continuación, como es positivo, no tenemos que hacer nada más. Por lo tanto, la representación de 3 en complemento a 2 con 5 bits es 0 0011b_b.

Ejercicio 17

¿Cuál es la representación del -3 en complemento a 2 con 5 bits?

📐Demostración

En este caso, seguiremos el mismo procedimiento, entonces:

3=3=0011b\begin{align*} |- 3| = 3 = 0011_b \end{align*}

Pero como es negativo, entonces invertimos todos los bits a partir del primer 1 empezando de derecha a izquierda, es decir:

0001111101\begin{array}{ccccc} 0 & 0 & 0 & 1 & 1\\ \hline 1 & 1 & 1 & 0 & 1 \end{array}

Entonces la representación de -3 en complemento a 2 con 5 bits es 1 1101b_b.

También, se puede representar en complemento a 1 y sumar 1 unidad, es decir:

3=00011b11100b+1=11101b\begin{align*} 3 = 00011_b \longrightarrow 11100_b + 1 = 11101_b \end{align*}

(complemento a 1 es invertir los bits)

Ejercicio 18

Valor decimal de un número representado en complemento a 2 en 6 bits cuyo valor es 01 0010b_b:

📐Demostración

En este caso, como el primer bit es 0, entonces es positivo, por lo que basta con convertir el número a decimal:

010010b=025+124+023+022+121+020=16+2=18\begin{align*} 01\, 0010_b = 0 \cdot 2^5 + 1 \cdot 2^4 + 0 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0 = 16 + 2 = 18 \end{align*}

Por lo tanto, el valor decimal del número representado en complemento a 2 en 6 bits cuyo valor es 01 0010b_b es 18.

Ejercicio 19

Valor decimal de un número representado en complemento a 2 en 6 bits cuyo valor es 11 0111b_b:

📐Demostración

En este caso, como el bit más significativo es 1 entonces, hay que invertir los bits a partir del primer 1 para volver a pasarlo a binario natural:

110111001001\begin{array}{cccccc} 1 & 1 & 0 & 1 & 1 & 1\\ \hline 0 & 0 & 1 & 0 & 0 & 1 \end{array}

Y ahora, basta pasar el resultado obtenido a decimal y habremos obtenido la magnitud:

001001b=23+20=8+1=9\begin{align*} 00 \, 1001_b = 2^3 + 2^0 = 8 + 1 = 9 \end{align*}

Como era negativo, entonces el número es 9- 9.

Ejercicio 20

Rango de representación con 7 bits utilizando complemento a 2:

📐Demostración

Podemos observar que el número negativo más grande posible es:

1000000b=26=64\begin{align*} 100 \, 0000_b = - 2^6 = - 64 \end{align*}

Y que el más grande positivo es:

0111111b=261=63\begin{align*} 011\, 1111_b = 2^6 - 1 = 63 \end{align*}

Entonces el rango de representación con 7 bits utilizando complemento a 2 es [64,63][- 64, 63].

Ejercicio 21

Un computador utiliza 4 bits para representar números enteros. Si se suman las cantidades 1001b_b y 0101b_b, ¿se produce carry u overflow? ¿Cuál es el resultado en decimal interpretado como número natural y como número entero representado en complemento a 2?

📐Demostración

Sumamos bit a bit:

100(1)1+01011110\begin{array}{ccccc} & 1 & 0 & \overset{(1)}{0} & 1\\ +& 0 & 1 & 0 & 1\\ \hline & 1 & 1 & 1 & 0 \end{array}

Como vemos, no se produce carry ni overflow. Por lo tanto, el resultado en decimal interpretado como número natural es:

1110b=23+22+21=8+4+2=14\begin{align*} 1110_b = 2^3 + 2^2 + 2^1 = 8 + 4 + 2 = 14 \end{align*}

Y como número entero representado en complemento a 2 es:

1110b0010b=2    2\begin{align*} 1110_b \longrightarrow 0010_b = 2 \implies - 2 \end{align*}

Ejercicio 22

Un computador utiliza 4 bits para representar números enteros. Si se suman las cantidades 0111b_b y 0101b_b, ¿se produce carry u overflow?

📐Demostración

Sumamos bit a bit:

0(1)1(1)1(1)1+01011100\begin{array}{ccccc} & \overset{(1)}{0} & \overset{(1)}{1} & \overset{(1)}{1} & 1\\ +& 0 & 1 & 0 & 1\\ \hline & 1 & 1 & 0 & 0 \end{array}

Como vemos, no se produce carry pero sí overflow. El resultado interpretado como natural es:

1100b=23+22=8+4=12\begin{align*} 1100_b = 2^3 + 2^2 = 8 + 4 = 12 \end{align*}

Y como entero:

1100b0100b=4    4\begin{align*} 1100_b \longrightarrow 0100_b = 4 \implies - 4 \end{align*}

Ejercicio 23

En un sumador para cantidades de 5 bits se introducen el número -7 codificado en signo-magnitud y el número -16 codificado e complemento a 2. ¿Qué resultado se obtendrá a la salida del sumador interpretado en complemento a 2? Contestar en decimal.

📐Demostración

Primero codifiquemos ambos números:

77=7=0111b    7=10111b1616=10000b\begin{align*} - 7 & \longrightarrow |- 7| = 7 = 0111_b \implies - 7 = 1\, 0111_b\\ - 16 & \longrightarrow - 1 6 = 10000_b \end{align*}

Ahora, sumamos ambos números:

0(1)10111+10000100111\begin{array}{cccccc} \overset{(1)}{\phantom{0}}& 1 & 0 & 1 & 1 & 1\\ +& 1 & 0 & 0 & 0 & 0\\ \hline \textcolor{red}{1}& 0 & 0 & 1 & 1 & 1 \end{array}

Como vemos, se produce overflow. Como el sumador es de 5 bits, en realidad el resultado es:

000111b=7\begin{align*} 0\, 00111_b = 7 \end{align*}

Ejercicio 24

En un sumador para cantidades de nn bits, con n=4n = 4 se introducen el mayor número entero positivo y el menor número entero negativo, ambos codificados en complemento a 2. ¿Qué resultado se obtendrá a la salida del sumador interpretado como un número entero codificado en signo-magnitud? Contestar en decimal.

📐Demostración

En representación de 4 bits en complemento a 2, el mayor número positivo es 0111b=70111_b = 7 y el menor número negativo es 1000b=81000_b = - 8. Sumamos ambos números:

0111+10001111\begin{array}{ccccc} & 0 & 1 & 1 & 1 \\ +& 1 & 0 & 0 & 0 \\ \hline & 1 & 1 & 1 & 1 \end{array}

Interpretado como signo-magnitud, al tener 1 en el bit más significativo será negativo y como la magnitud es:

111b=22+21+20=4+2+1=7\begin{align*} 111_b = 2^2 + 2^1 + 2^0 = 4 + 2 + 1 = 7 \end{align*}

Entonces es 7- 7.

Ejercicio 25

Sea un sumador para cantidades de n=5n = 5 bits. En uno de sus operandos se introduce el mayor número positivo representable en formato signo-magnitud y en el otro operando el menor número entero representable en formato complemento a 2. ¿Cuál será el resultado de sumar dichos valores? Interpretar el resultado en binario natural y responder en hexadecimal

📐Demostración

Dichos números serán:

01111b=15y10000b=16\begin{align*} 01111_b = 15 \quad \text{y} \quad 10000_b = - 16 \end{align*}

Sumamos ambos números:

01111+1000011111\begin{array}{cccccc} & 0 & 1 & 1 & 1 & 1\\ +& 1 & 0 & 0 & 0 & 0\\ \hline & 1 & 1 & 1 & 1 & 1 \end{array}

Interpretando el resultado en binario natural tenemos que:

11111b=24+23+22+21+20=16+8+4+2+1=31\begin{align*} 1\,1111_b = 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = 16 + 8 + 4 + 2 + 1 = 31 \end{align*}

Y en hexadecimal será:

111111F=1Fh\begin{align*} \underbrace{1}_{1} \, \underbrace{1111}_{F} = `1F`_h \end{align*}

Ejercicio 26

¿Cuántos bits serían necesarios para un formato que pudiese representar -126 y 128 en complemento a 2?

📐Demostración

Para representar 128 en complemento a 2 necesitamos representarlo en binario natural y luego añadir un bit más y que el bit más significativo no sea 1, es decir:

DivisioˊnResto128÷2=64064÷2=32032÷2=16016÷2=808÷2=404÷2=202÷2=101÷2=01\begin{array}{r|c} **División** & **Resto**\\ \hline 128 \div 2 = 64 & 0\\ 64 \div 2 = 32 & 0\\ 32 \div 2 = 16 & 0\\ 16 \div 2 = 8 & 0\\ 8 \div 2 = 4 & 0\\ 4 \div 2 = 2 & 0\\ 2 \div 2 = 1 & 0\\ 1 \div 2 = 0 & 1 \end{array}

Es decir, que 128 en binario natural es 10000000b1000\, 0000_b. Sin embargo, en complemento a 2 no puede empezar por 1 por ser negativo, entonces:

10000000010000000b\begin{align*} 1000\, 0000 \longrightarrow 0\, 1000 \, 0000_b \end{align*}

Es decir, para representar el 128 necesitamos 9 bits. Ahora vamos a por el -126:

126=126\begin{align*} |- 126| = 126 \end{align*}

Entonces, representado en binario natural:

DivisioˊnResto126÷2=63063÷2=31131÷2=15115÷2=717÷2=313÷2=111÷2=01\begin{array}{r|c} **División** & **Resto**\\ \hline 126 \div 2 = 63 & 0\\ 63 \div 2 = 31 & 1\\ 31 \div 2 = 15 & 1\\ 15 \div 2 = 7 & 1\\ 7 \div 2 = 3 & 1\\ 3 \div 2 = 1 & 1\\ 1 \div 2 = 0 & 1 \end{array}

Así, tenemos que:

126=126=1111110b\begin{align*} |- 126| = 126 = 111\, 1110_b \end{align*}

Como vemos, el valor absoluto de 126 en binario natural es de 7 bits pero empieza con un 1, lo cual no nos sirve porque debería ser positivo, es decir, empezar con un cero. Por ello, añadimos un bit más y tenemos que 126 es 0111 1110b_b. Ahora, invertimos a partir del primer 1 empezando por la derecha

01111101000010\begin{array}{ccccccc} 0 & 1 & 1 & 1 & 1 & 1 & 0\\ \hline 1 & 0 & 0 & 0 & 0 & 1 & 0 \end{array}

Así, vemos que necesitamos 8 bits pero como para el 128 necesitábamos 9 bits, entonces necesitamos 9 bits para representar ambos números.

Ejercicio 27

Se desea un formato que sea capaz de representar con números enteros en complemento a 2 en el rango [-1024, 1023] ¿Cuántos bits serían necesarios?

📐Demostración

Podríamos seguir un proceso similar al del ejercicio anterior, sin embargo, en este caso podemos emplear los rangos de representación en complemento a 2. Así, tenemos que:

Rango=[2n1,2n11]=[1024,1023]\begin{align*} \text{Rango} = [-2^{n - 1}, 2^{n - 1} - 1] = [-1024, 1023] \end{align*}

Por lo tanto, vamos a resolver las ecuaciones y elegir el máximo nn:

2n1=1024    2n1=1024=210    n1=10    n=112n11=1023    2n1=1024=210    n1=10    n=11\begin{align*} - 2^{n - 1} = - 1024 & \iff 2^{n - 1} = 1024 = 2^{10} \iff n - 1 = 10 \iff n = 11\\[2ex] 2^{n - 1} - 1 = 1023 & \iff 2^{n - 1} = 1024 = 2^{10} \iff n - 1 = 10 \iff n = 11 \end{align*}

Es decir, necesitaríamos 11 bits

Ejercicio 28

Se dispone de un sumador que opera con magnitudes de 6 bits. En una de sus entradas se pone el mayor número positivo en complemento a 2 y en la otra el menor positivo en signo-magnitud (no el cero). Interpreta la suma obtenida como un número en complemento a 2 y expresa el resultado en decimal

📐Demostración

El mayor número en complemento 2 de 6 bits es:

011111b\begin{align*} 01 \, 1111_b \end{align*}

Y el menor número positivo en signo-magnitud es:

000001b\begin{align*} 00\, 0001_b \end{align*}

Entonces, si sumamos bit a bit:

0(1)1(1)1(1)1(1)1(1)1+000001100000\begin{array}{ccccccc} & \overset{(1)}{0} & \overset{(1)}{1} & \overset{(1)}{1} & \overset{(1)}{1} & \overset{(1)}{1} & 1\\ +&0 & 0 & 0 & 0 & 0 & 1\\ \hline & 1 & 0 & 0 & 0 & 0 & 0 \end{array}

Entonces, interpretado en complemento a 2, como es negativo al ser su bit más significativo un 1, tenemos que invertir todos los 1 a partir del primer uno empezando por la derecha. Podemos observar que en realidad, el único 1 es el bit más significativo, es decir, que es el número más negativo en complemento a 2 de 6 bits. Por lo tanto, el resultado es:

261=25=32\begin{align*} - 2^{6 - 1} = - 2^5 = - 32 \end{align*}

Ejercicio 29

Se sabe que la secuencia de bits 45800C00h_h representa un valor numérico expresado en formato IEEE 754 de precisión simple. ¿Cuál es el valor decimal de dicho número?

📐Demostración

Para ello, vamos a proceder por partes:

  1. Obtener el valor en binario del número:
4010050101810000000000000C11000000000000\begin{align*} \underbrace{4}_{0100} \, \underbrace{5}_{0101} \, \underbrace{8}_{1000} \, \underbrace{0}_{0000} \, \underbrace{0}_{0000} \, \underbrace{C}_{1100} \, \underbrace{0}_{0000} \, \underbrace{0}_{0000} \end{align*}
  1. Separamos el número en los componentes del formato IEEE 754:
0Signo10001011Exponente00000000000110000000000Mantisa\begin{align*} \underbrace{0}_{\text{\tiny Signo}} \, \underbrace{1000 \, 1011}_{\text{\tiny Exponente}} \, \underbrace{000 \, 0000 \, 0000 \, 1100 \, 0000 \, 0000}_{\text{\tiny Mantisa}} \end{align*}
  1. Calculamos el signo:
0    Positivo\begin{align*} 0 \implies \text{Positivo} \end{align*}
  1. Calculamos el exponente en exceso a 127:
10001011=27+23+21+20=128+8+2+1=139127=12\begin{align*} 1000\, 1011 = 2^7 + 2^3 + 2^1 + 2^0 = 128 + 8 + 2 + 1 = 139 - 127 = 12 \end{align*}
  1. Calculamos la mantisa (añadiendo el 1 implícito):
1.00000000000110000000000\begin{align*} 1. 000\, 0000\, 0000\, 1100\, 0000\, 0000 \end{align*}

Y movemos la coma 12 posiciones a la derecha:

1000000000001.10000000000\begin{align*} 1000 \, 0000\, 0000\, 1.100\, 0000\, 0000 \end{align*}

Decodificamos la parte entera:

1000000000001=212+20=4096+1=4097\begin{align*} 1\, 0000 \, 0000\, 0001 = 2^{12} + 2^0 = 4096 + 1 = 4097 \end{align*}

Y la parte decimal:

0.10000000000=21=0.5\begin{align*} 0.1000\, 0000\, 000 = 2^{ - 1} = 0.5 \end{align*}
  1. Agrupamos ambas partes:
4097+0.5=4097.5\begin{align*} 4097 + 0.5 = 4097.5 \end{align*}

Por lo tanto, el valor decimal del número representado en formato IEEE 754 de precisión simple 45800C00h_h es 4097.5.

Ejercicio 30

Se sabe que la secuencia de bits 42880000h_h representa un valor numérico expresado en formato IEEE 754 de precisión simple. ¿Cuál es el valor hexadecimal de dicho número?

📐Demostración

Seguimos un procedimiento similar al ejercicio anterior:

  1. Obtener el valor en binario del número:
4010020010810008100000000000000000000000\begin{align*} \underbrace{4}_{0100} \, \underbrace{2}_{0010} \, \underbrace{8}_{1000} \, \underbrace{8}_{1000} \, \underbrace{0}_{0000} \, \underbrace{0}_{0000} \, \underbrace{0}_{0000} \, \underbrace{0}_{0000} \end{align*}
  1. Separamos el número en los componentes del formato IEEE 754:
0Signo10000101Exponente00010000000000000000000Mantisa\begin{align*} \underbrace{0}_{\text{\tiny Signo}} \, \underbrace{1000 \, 0101}_{\text{\tiny Exponente}} \, \underbrace{000 \, 1000 \, 0000 \, 0000 \, 0000 \, 0000}_{\text{\tiny Mantisa}} \end{align*}
  1. Calculamos el signo:
0    Positivo\begin{align*} 0 \implies \text{Positivo} \end{align*}
  1. Calculamos el exponente en exceso a 127:
10000101=27+22+20=128+4+1=133127=6\begin{align*} 1000\, 0101 = 2^7 + 2^2 + 2^0 = 128 + 4 + 1 = 133 - 127 = 6 \end{align*}
  1. Calculamos la mantisa (añadiendo el 1 implícito):
1.00010000000000000000000\begin{align*} 1. 000\, 1000 \, 0000 \, 0000 \, 0000 \, 0000 \end{align*}

Y movemos la coma 6 posiciones a la derecha:

1000100.00000000000000000\begin{align*} 1000 \, 100.0 \, 0000 \, 0000 \, 0000 \, 0000 \end{align*}

El número no tiene decimales, por lo que el valor en hexadecimal es:

100401004\begin{align*} \underbrace{100}_{4} \, \underbrace{0100}_{4} \end{align*}

Por lo tanto, el valor hexadecimal del número representado en formato IEEE 754 de precisión simple 42880000h_h es 44h_h.

Ejercicio 31

¿Cuál es la codificación del mayor número positivo que se puede representar en formato IEEE 754 de precisión simple?. Responder en hexadecimal (no se considera el infinito)

📐Demostración

Extraemos cada parte del número:

  • Como es positivo, el signo es 0.
  • El exponente es el mayor posible representado en exceso a 127:
11111110\begin{align*} 1111\, 1110 \end{align*}

Ya que el caso particular de 1111 1111b_b en este caso se reserva para el infinito.

  • La mantisa es:
1.11111111111111111111111\begin{align*} 1. 1111\, 1111\, 1111\, 1111\, 1111\, 111 \end{align*}

Entonces el número codificado en hexadecimal en formato IEEE 754 de precisión simple es:

011171111F011171111F1111F1111F1111F1111F\begin{align*} \underbrace{0111}_{7} \, \underbrace{1111}_{F} \, \underbrace{0111}_{7} \, \underbrace{1111}_{F} \, \underbrace{1111}_{F} \, \underbrace{1111}_{F} \, \underbrace{1111}_{F} \, \underbrace{1111}_{F} \end{align*}

Es decir, 7F7FFFFFh_h.

Ejercicio 32

Que número decimal representa C1500000h_h en formato IEE 754 de precisión simple?

📐Demostración

Seguimos el mismo proceso de siempre:

  • Convertimos el número a binario:
C110010001501010000000000000000000000000\begin{align*} \underbrace{C}_{1100} \, \underbrace{1}_{0001} \, \underbrace{5}_{0101} \, \underbrace{0}_{0000} \, \underbrace{0}_{0000} \, \underbrace{0}_{0000} \, \underbrace{0}_{0000} \, \underbrace{0}_ {0000} \end{align*}
  • Separamos el número en sus componentes:
1Signo10000010Exponente10100000000000000000000Mantisa\begin{align*} \underbrace{1}_{\text{\tiny Signo}} \, \underbrace{1000 \, 0010}_{\text{\tiny Exponente}} \, \underbrace{101 \, 0000 \, 0000 \, 0000 \, 0000 \, 0000}_{\text{\tiny Mantisa}} \end{align*}
  • Calculamos el signo:
1    Negativo\begin{align*} 1 \implies \text{Negativo} \end{align*}
  • Calculamos el exponente en exceso a 127:
10000010=27+21=128+2=130130127=3\begin{align*} 1000 \, 0010 = 2^7 + 2^1 = 128 + 2 = 130 \longrightarrow 130 - 127 = 3 \end{align*}
  • Calculamos la mantisa (añadiendo el 1 implícito):
1.10100000000000000000000\begin{align*} 1.101 \, 0000 \, 0000 \, 0000 \, 0000 \, 0000 \end{align*}

Y movemos la coma 3 posiciones a la derecha:

1101.00000000000000000000\begin{align*} 1101. \, 0000 \, 0000 \, 0000 \, 0000 \, 0000 \end{align*}

Entonces, nos basta con decodificar la parte entera (no tiene decimal):

1101=23+22+20=8+4+1=13\begin{align*} 1101 = 2^3 + 2^2 + 2^0 = 8 + 4 + 1 = 13 \end{align*}
  • Juntamos todo, como es negativo añadimos el menos:
13\begin{align*} - 13 \end{align*}

Por lo tanto, el número decimal representado en formato IEEE 754 de precisión simple por C1500000h_h es -13.

Ejercicio 33

Representar el número -12.25 en formato IEEE 754 de precisión simple en hexadecimal

📐Demostración

Para ello, vamos a seguir los siguientes pasos:

  • Pasamos el número a binario. Primero la parte entera:
12=1100b\begin{align*} 12 = 1100_b \end{align*}

Y la parte decimal:

MultiplicacioˊnParteentera0.252=0.500.52=1.01\begin{array}{r|c} **Multiplicación** & **Parte entera**\\ \hline 0.25 \cdot 2 = 0.5 & 0\\ 0.5 \cdot 2 = 1.0 & 1 \end{array}

Entonces, la magnitud codificada en binario es:

1100.01\begin{align*} 1100.01 \end{align*}
  • Movemos la coma para dejar un único 1 a la izquierda:
1100.01=1.1000123\begin{align*} 1100.01 = 1.10001 \cdot 2^3 \end{align*}

Entonces el exponente es 3.

  • Representamos el exponente en exceso a 127:
127+3=130=128+2=10000000+00000010=10000010b\begin{align*} 127 + 3 = 130 = 128 + 2 = 1000\, 0000 + 0000\, 0010 = 1000\, 0010_b \end{align*}
  • El signo es negativo, por lo que el bit de signo es 1.
  • La mantisa es:
10001000000000000000000\begin{align*} 100\, 0100\, 0000\, 0000\, 0000\, 0000 \end{align*}
  • Juntamos todo y convertimos a hexadecimal:
1100C00011010040100400000000000000000000\begin{align*} \underbrace{1100}_{C} \, \underbrace{0001}_{1} \, \underbrace{0100}_{4} \, \underbrace{0100}_{4} \, \underbrace{0000}_{0} \, \underbrace{0000}_{0} \, \underbrace{0000}_{0} \, \underbrace{0000}_{0} \, \end{align*}

Por lo tanto, el número -12.25 en formato IEEE 754 de precisión simple en hexadecimal es C1440000h_h.

Ejercicio 34

¿Cuál es el menor número positivo normalizado que se puede representar en el formato IEEE-754 de precisión simple? Contestar en potencias de 2

📐Demostración

Extraemos la información de cada componente:

  • Es positivo, por lo que el signo es 0.
  • Tiene que ser el menor, por lo que el exponente es el menor posible:
00000001\begin{align*} 0000\, 0001 \end{align*}
  • La mantisa es:
00000000000000000000000\begin{align*} 000\, 0000\, 0000\, 0000\, 0000\, 0000 \end{align*}

Por lo tanto, el menor número positivo normalizado que se puede representar en el formato IEEE-754 de precisión simple es:

2126\begin{align*} 2^{-126} \end{align*}

ya que el exponente en exceso a 127 es:

1127=126\begin{align*} 1 - 127 = -126 \end{align*}

Y la mantisa es:

1.00000000000000000000000=1\begin{align*} 1.000\, 0000\, 0000\, 0000\, 0000\, 0000 = 1 \end{align*}

Entonces, el número es:

21261.0=2126\begin{align*} 2^{-126} \cdot 1.0 = 2^{-126} \end{align*}

Ejercicio 35

¿Cuál es la máxima diferencia entre dos números positivos consecutivos en el formato de coma flotante IEEE-754 de precisión simple? Responder en potencia de dos

💡Nota

Tal y como está el enunciado podríamos decir que es infinito, ya que la diferencia entre dos infinitos consecutivos es infinita. Sin embargo, vamos a suponer que se refiere a la máxima diferencia entre dos números positivos consecutivos representables en el formato IEEE-754 de precisión simple que no sean infinitos.

📐Demostración

Para ello, vamos a ver cuál es el mayor número representable en el formato IEEE-754 de precisión simple y cuál es el siguiente número representable. Como su exponente es el máximo posible, es decir:

11111110=254254127=127\begin{align*} 1111\, 1110 = 254 \longrightarrow 254 - 127 = 127 \end{align*}

La mantisa sería:

1.1111111111111111111111\begin{align*} 1.111\, 1111\, 1111\, 1111\, 1111\, 111 \end{align*}

Este número sería:

(2223)21272128\begin{align*} (2 - 2^{-23}) \cdot 2^{127} \approx 2^{128} \end{align*}

Como la distancia entre dos números consecutivos en un mismo rango de exponentes viene dada por:

2e23\begin{align*} 2^{e - 23} \end{align*}

Para el mayor número de exponente posible e=127e = 127 tenemos que:

212723=2104\begin{align*} 2^{127 - 23} = 2^{104} \end{align*}

Es decir, la máxima diferencia entre dos números positivos consecutivos en el formato de coma flotante IEEE-754 de precisión simple es 21042^{104}.

Tema 2

Ejercicio 1

Calcula la tabla de verdad del siguiente circuito. ¿Qué operación lógica básica se realiza entre las entradas A y B?

circ1

📐Demostración

Para hallar la tabla de verdad tenemos:

ABS000011101110\begin{array}{cc|c} A & B & S\\\hline 0 & 0 & 0\\ 0 & 1 & 1\\ 1 & 0 & 1\\ 1 & 1 & 0 \end{array}

Por lo tanto, la operación lógica básica entre las entradas A y B es la operación XOR.

Ejercicio 2

Calcula la tabla de verdad del siguiente circuito. ¿Qué operación lógica básica se realiza entre las entradas A y B?

circ2

📐Demostración

Dado que el multiplexor de 4 entradas funciona de la siguiente manera:

c0c1ei00e010e101e211e3\begin{array}{cc|c} c_0 & c_1 & e_i\\\hline 0 & 0 & e_0\\ 1 & 0 & e_1\\ 0 & 1 & e_2\\ 1 & 1 & e_3 \end{array}

La tabla de verdad es:

ABS000010100110\begin{array}{cc|c} A & B & S\\\hline 0 & 0 & 0\\ 0 & 1 & 0\\ 1 & 0 & 0\\ 1 & 1 & 0 \end{array}

Por lo tanto, la operación lógica básica entre las entradas A y B es S=0S = 0

Ejercicio 3

Calcula la tabla de verdad del siguiente circuito. ¿Qué operación lógica básica se realiza entre las entradas A y B?

circ3

📐Demostración

La tabla de verdad es:

ABS000011101110\begin{array}{cc|c} A & B & S\\\hline 0 & 0 & 0\\ 0 & 1 & 1\\ 1 & 0 & 1\\ 1 & 1 & 0 \end{array}

Por lo tanto, la operación lógica básica entre las entradas A y B es XOR.

Ejercicio 4

Dado el siguiente circuito, ¿qué valor se obtendrá en la salida SS?

circ4

📐Demostración

Podemos ver que la salida que nos interesa de los multiplexores es la del MUX2 de debajo del SUM1 del centro y esta está seleccionada por la entrada a0a_0 que viene que tiene un valor 0, entonces se selecciona la entrada e0e_0. Vemos que la entrada 0 de este MUX2 viene del MUX2 que está inmediatamente debajo del SUM1 de la izquierda. En este caso, este mux está controlado por la entrada a0a_0 a la que le llega voltaje (un 1 entonces) y por tanto, está seleccionada la entrada e1e_1. Vemos que la entrada e1e_1 viene dada por un 1, así, la salida del MUX2 del centro es 1.

Ahora, al primer sumador empezando por la derecha, le llegan dos 1's por las entradas y un 0 por el CinC_{in}, por lo que su salida será 0 y un carry de 1, es decir S0=0S_0 = 0

Ahora nos vamos con el SUM1 de la izquierda ya que es al que le llega el carry in del sumador de la derecha y, además, es el que enviará el carry al sumador del medio. Así, también le llegan dos 1's por las entradas pero un 1 por el carry in, por lo que su salida será 1 y un carry de 1, es decir S1=1S_1 = 1.

Finalmente, en el sumador del medio, le llegan dos 1's por las entradas y un 1 por el carry in, por lo que su salida será 1 y un carry de 1, es decir S2=1S_2 = 1 y Cout=1C_{out} = 1.

El número resultante es S=110b=6S = 110_b = 6.

Ejercicio 5

Suministra la función lógica y diseña un circuito que dados dos números naturales de 1 bit, A y B, ponga la salida a uno cuando A sea mayor que B. Puede haber múltiples soluciones válidas

📐Demostración

Primero, vamos a ver cual sería la tabla de verdad de la función que queremos obtener:

ABS000010101110\begin{array}{cc|c} **A** & **B** & **S**\\\hline 0 & 0 & 0\\ 0 & 1 & 0\\ 1 & 0 & 1\\ 1 & 1 & 0 \end{array}

Ahora, vamos a seleccionar los minterms que tienen salida 1, es decir:

m2=AB\begin{align*} m_2 = A \cdot \overline{B} \end{align*}

Como es el único, la función lógica es la suma de los minterms:

S=AB\begin{align*} S = A \cdot \overline{B} \end{align*}

Y el circuito sería un AND entre A y la negación de B.

Ejercicio 6

Suministra la función lógica y diseña un circuito que ponga la salida a uno cuando el número de tres bits que recibe como entrada sea mayor que 5. Puede haber múltiples soluciones válidas.

📐Demostración

En este caso, procedemos igual que antes haciendo la tabla de verdad:

ABCS00000010010001101000101011011111\begin{array}{ccc|c} **A** & **B** & **C** & **S**\\\hline 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 1 & 0 & 0\\ 0 & 1 & 1 & 0\\ 1 & 0 & 0 & 0\\ 1 & 0 & 1 & 0\\ 1 & 1 & 0 & 1\\ 1 & 1 & 1 & 1 \end{array}

Obtenemos los minterms con salida 1:

m6ABCm7ABC\begin{align*} m_6 & A \cdot B \cdot \overline{C}\\ m_7 & A \cdot B \cdot C \end{align*}

Por lo tanto, la función lógica es:

S=ABC+ABC\begin{align*} S = A \cdot B \cdot \overline{C} + A \cdot B \cdot C \end{align*}

Hacer circuito a mano.

Ejercicio 7

Suministra la función lógica y diseña un circuito que ponga la salida a uno cuando el número de tres bits que se recibe como entrada sea par (el cero se considera par). Puede haber múltiples soluciones válidas.

📐Demostración

Obtenemos la tabla de verdad:

ABCS00010010010101101001101011011110\begin{array}{ccc|c} **A** & **B** & **C** & **S**\\\hline 0 & 0 & 0 & 1\\ 0 & 0 & 1 & 0\\ 0 & 1 & 0 & 1\\ 0 & 1 & 1 & 0\\ 1 & 0 & 0 & 1\\ 1 & 0 & 1 & 0\\ 1 & 1 & 0 & 1\\ 1 & 1 & 1 & 0 \end{array}

Obtenemos los minterms con salida 1:

m0=ABCm2=ABCm4=ABCm6=ABC\begin{align*} m_0 & = \overline{A} \cdot \overline{B} \cdot \overline{C}\\ m_2 & = \overline{A} \cdot B \cdot \overline{C}\\ m_4 & = A \cdot \overline{B} \cdot \overline{C}\\ m_6 & = A \cdot B \cdot \overline{C} \end{align*}

Por lo tanto, la función lógica es:

S=ABC+ABC+ABC+ABC\begin{align*} S = \overline{A} \cdot \overline{B} \cdot \overline{C} + \overline{A} \cdot B \cdot \overline{C} + A \cdot \overline{B} \cdot \overline{C} + A \cdot B \cdot \overline{C} \end{align*}

Se podría simplificar.

Ejercicio 8

A una ALU de 4 bits análoga a la vista en clase se le pide realizar varias operaciones sobre los operando naturales A=4, B=12. Indicar el resultado en binario de las operaciones y el de los bits de estado. Nota: el valor de los bits de carry y overflow debe ignorarse en las operaciones no aritméticas y puede indicarse con un guión

  • SUMA:

📐Demostración

Primero, pasamos a binario natural los números:

4=0100b12=1100b\begin{align*} 4 = 0100_b \quad 12 = 1100_b \end{align*}

Ahora, sumamos término a término:

0(1)0(1)100+110010000\begin{array}{ccccc} \overset{(1)}{\phantom{0}}& \overset{(1)}{0} & 1 & 0 & 0\\ + & 1 & 1 & 0 & 0\\ \hline 1 & 0 & 0 & 0 & 0 \end{array}

Por tanto, como es una ALU de 4 bits, el resultado solo comprende los 4 bits menos significativos.

  • Resultado: 0000b_b
  • ZF: 1 (porque el resultado es 0)
  • CF: 1 (porque hay acarreo interpretando los números como naturales)
  • OF: 0 (porque no hay desbordamiento interpretando los números como enteros en complemento a 2, un positivo y un negativo pueden dar un positivo)
  • SF: 0 (porque el resultado interpretado como entero en complemento a 2 es positivo)
  • RESTA:

📐Demostración

Para restar pasamos a complemento a 2 el segundo término y sumamos, es decir:

12=1100b0100b\begin{align*} 12 = 1100_b \longrightarrow 0100_b \end{align*}

Y ahora sumamos:

0(1)100+01001000\begin{array}{ccccc} & \overset{(1)}{0} & 1 & 0 & 0\\ +& 0 & 1 & 0 & 0\\ \hline & 1 & 0 & 0 & 0 \end{array}

Por tanto:

  • Resultado: 1000b_b
  • ZF: 0 (porque el resultado no es 0)
  • CF: 1 (porque al restar naturales el sustraendo es mayor que el minuendo)
  • OF: 1 (la suma de dos positivos no puede ser negativa interpretando los números como enteros en complemento a 2)
  • SF: 1 (porque el resultado interpretado como entero en complemento a 2 es negativo)
  • AND:

📐Demostración

Hacemos la operación bit a bit:

0100AND11000100\begin{array}{ccccc} & 0 & 1 & 0 & 0\\ AND & 1 & 1 & 0 & 0\\ \hline & 0 & 1 & 0 & 0 \end{array}

Entonces:

  • Resultado: 0100b_b
  • ZF: 0 (porque el resultado no es 0)
  • CF: - (no se tiene en cuenta en operaciones lógicas)
  • OF: - (no se tiene en cuenta en operaciones lógicas)
  • SF: 0 (porque el resultado interpretado como entero en complemento a 2 es positivo)
  • OR:

📐Demostración

Hacemos la operación bit a bit:

0100OR11001100\begin{array}{ccccc} & 0 & 1 & 0 & 0\\ OR & 1 & 1 & 0 & 0\\ \hline & 1 & 1 & 0 & 0 \end{array}

Entonces:

  • Resultado: 1100b_b
  • ZF: 0 (porque el resultado no es 0)
  • CF: - (no se tiene en cuenta en operaciones lógicas)
  • OF: - (no se tiene en cuenta en operaciones lógicas)
  • SF: 1 (porque el resultado interpretado como entero en complemento a 2 es negativo)
  • XOR:

📐Demostración

Hacemos la operación bit a bit:

0100XOR11001000\begin{array}{ccccc} & 0 & 1 & 0 & 0\\ XOR & 1 & 1 & 0 & 0\\ \hline & 1 & 0 & 0 & 0 \end{array}

Entonces:

  • Resultado: 1000b_b
  • ZF: 0 (porque el resultado no es 0)
  • CF: - (no se tiene en cuenta en operaciones lógicas)
  • OF: - (no se tiene en cuenta en operaciones lógicas)
  • SF: 1 (porque el resultado interpretado como entero en complemento a 2 es negativo)

Ejercicio 9

Una ALU de 6 bits análoga a la vista en clase tiene todas sus entradas a 1 a excepción de las entradas a4,a3,a2,a1a_4, a_3, a_2, a_1 y a0a_0. Indica el resultado de la ALU en decimal, interpretando como natural e interpretando como entero así como el valor de los bits de estado

📐Demostración

Primero, vamos a ver que números se están introduciendo:

A=100000bB=111111bO1,O2,Cin,Comp-1=1111\begin{align*} A = 10 \, 0000_b \quad B = 11 \, 1111_b \quad O_1, O_2, C_{in}, \text{Comp-1} = 1111 \end{align*}

Entonces, estamos haciendo una resta, es decir, sumando un complemento a 1 + 1 en BB. Para ello:

B=111111b000000b+1=000001b\begin{align*} B = 11 \, 1111_b \longrightarrow 00 \, 0000_b + 1 = 00 \, 0001_b \end{align*}

Entonces, sumamos bit a bit:

100000+000001100001\begin{array}{ccccccc} & 1 & 0 & 0 & 0 & 0 & 0\\ + & 0 & 0 & 0 & 0 & 0 & 1\\ \hline & 1 & 0 & 0 & 0 & 0 & 1 \end{array}

Entonces:

  • Resultado: 100001b_b
  • ZF: 0 (porque el resultado no es 0)
  • CF: 1 (porque al restar naturales el sustraendo es mayor que el minuendo)
  • OF: 0 (porque no hay desbordamiento interpretando los números como enteros en complemento a 2, un positivo y un negativo pueden dar un positivo)
  • SF: 1 (porque el resultado interpretado como entero en complemento a 2 es negativo)

Entonces, interpretando el resultado como natural tenemos que:

100001b=25+20=32+1=33\begin{align*} 10 \, 0001_b = 2^5 + 2^0 = 32 + 1 = 33 \end{align*}

Y como entero en complemento a 2:

100001b011111b=24+23+22+21+20=16+8+4+2+1=31    31\begin{align*} 10 \, 0001_b \longrightarrow 01 \, 1111_b = - 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = 16 + 8 + 4 + 2 + 1 = 31 \implies - 31 \end{align*}

Y el ZCOS sería 0101

Ejercicio 10

Una ALU de 4 bits similar a la bista en clase realiza una operación aritmético-lógica tras la que losbits del registro de estado quedan con los siguinetes valores ZCOS=1110. Se sabe que todas las señales de entrada están a 0 a excepción de a3,b3,OP0,OP1a_3, b_3, OP_0, OP_1 de las que se desconoce su valor. Teniendo en cuenta la información propocionada, ¿Cual serán los valores de a3,b3,OP1a_3, b_3, OP_1.

📐Demostración

Para ello, vamos a recopilar la información que tenemos:

A=_000B=_000ZCOS=1110Cin=0Comp-1=0\begin{align*} A = \_000 \quad B = \_000 \quad ZCOS = 1110 \quad C_{in} = 0 \quad \text{Comp-1} = 0 \end{align*}

Por lo tanto, sabemos que la operación no puede ser una resta. Además, como el ZF es 0, entonces el restulado es 0. Además, se ha producido acarreo, por lo que al hacer la suma de naturales se ha desbordado.

De hecho, a partir de este dato, sabemos que, como los términos menos significativos en ambos números AA y BB son cero, entonces la suma de a3a_3 y b3b_3 ha producido un acarreo. Por lo tanto, a3=b3=1a_3 = b_3 = 1.

Además, como el OF es 1, entonces también hubo desbordamiento en la suma de enteros en complemento a 2. Por lo tanto, como AA y BB son negativos, la suma de dos negativos debería de ser negativa y en este caso, ha sido positiva, lo cual hace ver que la operación de a3a_3 y b3b_3 ha dado 0. Por lo tanto, solo puede ser o una operación XOR o una suma. Entonces OP1=0OP_1 = 0.

Ejercicio 11

Se desea construir una ALU que sea capaz de operar con números enteros expresados en complemento a 2 en el rango [-1024, 1023]. ¿Cuántos sumadores elementales son necesarios para construir esta ALU?

📐Demostración

Para ello, vamos a ver cuántos bits necesitamos para representar el rango de números:

Rango Comp-2=[2n1,2n11]\begin{align*} \text{Rango Comp-2} = [ - 2^{n - 1}, 2^{n - 1} - 1] \end{align*}

Entonces:

1024=2n1    210=2n1    10=n1    n=111023=2n11    210=2n1    10=n1    n=11\begin{align*} - 1024 = - 2^{n - 1} &\iff 2^10 = 2^{n - 1} \iff 10 = n - 1 \iff n = 11\\ 1023 = 2^{n - 1} - 1 & \iff 2^{10} = 2^{n - 1} \iff 10 = n - 1 \iff n = 11 \end{align*}

Por lo tanto, necesitamos 11 bits para representar el rango de números. Entonces, para construir la ALU necesitamos 11 sumadores elementales.

Ejercicios

EJercicio 1

Sea la variable int var = -240.

  1. Primero la magnitud en binario:
240=11110000b\begin{align*} 240 = 1111\,0000_b \end{align*}

Y como estamos representandolo en complemento a 2 tiene que empezar por 0, entonces:

011110000\begin{align*} 01111\, 0000 \end{align*}

y ahora para representar a complemento a 2 invertimos a partir del primer 1:

011110000100010000\begin{align*} 01111\, 0000 \longrightarrow 10001\, 0000 \end{align*}

Sin embargo, no está en 32 bits, entonces habría que añadir 0 en el original o 1's en el invertido, así queda:

11100010000\begin{align*} 1\ldots 110001 \, 0000 \end{align*}

Y para pasarlo a hex y como son grupos de cuatro y a la izquierda solo tenemos 1, nos queda:

FFFFFF10\begin{align*} FFFF FF10 \end{align*}

Ejercicio 1

En un ordenador se realiza la siguinete operación, calcular el valor interprentado los operandos y el resultado interpretandolos como naturales y como enteros en complemento a 2

1101010+010110010010110\begin{array}{cccccccc} &1 & 1 & 0 & 1 & 0 & 1 &0\\ +&0 & 1 & 0 & 1 & 1 & 0 & 0\\ \hline 1 & 0 & 0 & 1 & 0 & 1 & 1 & 0 \end{array}

Así, el restulado sería (quetando el carry) 2222 como natural y 2222 como entero. Sin embargo, como hay acarreo no son correctos los resultados al interpretarlos como naturales. Como enteros el resultado es correcto por el cambio de signo.

Podemos ver que el primero de los dos en decimal sería 22- 22 y luego 4444 que da 22.

Ejercicio 2

El número natural más grande que sumado a este anterior produce un resultado válido interpretando las cosas como enteros

1101010+xxxxxxx\begin{array}{cccccccc} &1 & 1 & 0 & 1 & 0 & 1 &0\\ +&x & x & x & x & x & x & x\\ \hline \end{array}

Arriba tengo -22 y lo que quiero es que no se salga del rango de representación, que viene dado por:

Rango=[2n1,2n11]=[271,2711]=[64,63]\begin{align*} \text{Rango} = [-2^{n - 1}, 2^{n - 1} - 1] = [-2^{7 - 1}, 2^{7 - 1} - 1] = [-64, 63] \end{align*}

Por lo tanto, el número más grande que puedo sumar es 63, así:

64=22+x    x=42\begin{align*} - 64 = - 22 + x \implies x = - 42 \end{align*}

Entonces, basta con ver la codificación del 42 en complemento a 2:

42=0101010binvertir1010110b\begin{align*} 42 = 0101010_b \overset{\text{invertir}}{\longrightarrow} 1010110_b \end{align*}

Entonces el natural más grande será:

1010110b=86\begin{align*} 1010110_b = 86 \end{align*}

Ejercicio 3

Convertir el siguiente número, C5378000H

C5378000H=11000101001101111000000000000000\begin{align*} C5378000H = 1100\,0101\,0011\,0111\,1000\,0000\,0000\,0000 \end{align*}

Ahora tenemos que el primero es un 1, por lo que es negativo, a continuación, tenemos el exponente que sería:

10001010138    E=138127=11\begin{align*} 1000\, 1010 \longrightarrow 138 \implies E = 138 - 127 = 11 \end{align*}

Y la mantisa sería:

1.01101111000000000000000211\begin{align*} 1.011\,0111\,1000\,0000\,0000\,0000 \cdot 2^{11} \end{align*}

Entonces tenemos que:

101101111000.0000000000000000\begin{align*} 1011\, 0111\, 1000.\, 0000\, 0000\, 0000\, 0000 \end{align*}

Codificando en decimal la parte entera tenemos que:

101101111000=2936\begin{align*} 1011 \, 0111\, 1000 = 2936 \end{align*}

Por lo tanto, el número sería:

2936\begin{align*} - 2936 \end{align*}

Ejercicio 4

Convertir el siguiente número, -22.75:

  1. Signo es - entonces S=1S = 1:
  2. La parte entera de 22 es 10110b10110_b, por lo que la parte entera sería 10110b10110_b.
  3. La parte decimal de 0.75 es 0.11b0.11_b, por lo que la parte decimal sería 0.11b0.11_b.
  4. Por lo tanto, el número sería:
10110.11b\begin{align*} 10110.11_b \end{align*}
  1. Metemos el exponente:
1.01101124\begin{align*} 1.011011 \cdot 2^4 \end{align*}
  1. El exponente en exceso a 127 sería:
4+127=131=10000011b\begin{align*} 4 + 127 = 131 = 1000\,0011_b \end{align*}
  1. Por lo tanto, el número sería:
11000001101101100000000000000000\begin{align*} 1100\, 0001\, 1011\, 0110\, 0000\, 0000\, 0000\, 0000 \end{align*}