Estructuras de Computadores I Tarea 04 02/99 Aritmética. 1. Dada

Anuncio
Estructuras de Computadores I
Tarea 04
02/99
Aritmética.
1. Dada la secuencia de bits:
0011 0100 0101 0101 0100 0011 0100 0010
Qué representa, asumiendo que es:
a. Un número entero en complemento dos.
b. Fracción en complemento dos
c. Un entero sin signo
d. Un punto flotante precisión simple.
2. Se tiene la secuencia binaria 10101
i)
Si representa una fracción pura con signo en complemento uno, calcular el
equivalente decimal.
ii)
Si representa un entero polarizado calcular el equivalente decimal.
iii)
Si representa un número con signo, en complemento dos, con dos cifras binarias
fraccionarias, calcular su equivalente decimal.
3. En un registro de largo 2, con base decimal:
a) Qué representación complemento a 9 le corresponden a los siguientes números con
signo:
-0, -5, +50, -49
b) Qué representación complemento a 10 le corresponden a los siguientes números con
signo:
-1, +35, -35
4. Aritmética.
a) Operandos binarios de largo 3 en complemento 2. Determinar el intervalo, en
decimal, de los productos posibles si los operandos son:
a1) enteros con signo
a2) enteros sin signo
a3) fraccionarios puros con signo.
b) Determinar, en binario, los siguientes productos decimales:
b1) ( -3) * (-2)
b2) (+31/32) * (-0,875)
5. Estudiar ejemplos resueltos de páginas: 203, 204 y 208
Se adjunta archivo con algoritmo de división.
#include <stdio.h>
/*long de 32 bits int de 16 bits */
void prtlong(unsigned long int i)
{ int j;
unsigned long int k;
k=1L;
for (j=31; j>=0; j--) if((k<<j)&i) printf("1"); else printf("0");
}
void prtint(int i)
{ int j,k=1;
for (j=15; j>=0; j--) if((k<<j)&i) printf("1"); else printf("0");
}
void sp(int i){ int j; for(j=i;j>0;j--) printf(" ");}
void lls(unsigned int *p,unsigned int *q)
{
int k;
k=(*q)&0x8000;
(*p)<<=1;if(k) *p=(*p)|0x0001;
(*q)<<=1;
}
int main(void)
{
int j;
unsigned int P,Q,R;
P=0x0000;Q=0x1000;R=0x0100;
sp(7); putchar('P'); sp(16); putchar('Q'); sp(20); printf("R\n");
prtint(P); sp(1); prtint(Q); printf(" / "); prtint(R); printf("\n");
printf("---------------------------------\n");
for(j=15;j>=0;j--)
{
lls(&P,&Q);
prtint(P); sp(2); prtint(Q); sp(2); printf("%2d",15-j); printf("\n");
if(P>=R) {P-=R;Q++;}
}
printf("---------------------------------\n"); prtint(P);sp(2);prtint(Q);printf("\n");
printf(" resto
cuociente\n"); if (Q&0x8000) printf("overflow\n");
return(1);
}
Descargar