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); }