ÍNDEX: PÀGINA 1.− Introducció 2 2.− Aritmètica binària 3 3.− Sistemes de representació de nombres a les computadores 4 · Binari pur o punt fix sense signe 5 · Punt fix amb signe o signe magnitud (MS) 5 · Complement a 1 (C1) 5 · Complement a 2 (C2) 6 · Excés a X 6 · Coma flotant 6 · Decimal (BCD) : 7 · Empaquetat 7 · Desempaquetat 8 Quadre d'exemples 9 Com saber quin número és en cada tipus de representació un número escrit en binari o al revés? Exemples extesos 13 4.− Canviar de signe 15 5.− Canvis de sistema de numeració 16 6.− Esquema Conversions diferents sistemes de numeració 20 1.− Introducció L'ordinador representa la informació amb bits, i aquests poden ser 0 o 1. Un conjunt de 0 i/o 1 formen un byte. Normalment, un byte està format per 8 bits. Ex.: 00010111 Això és un byte 10010100 Això és un altre byte 1 El bit 1 indica que està encès, i el 0 que està apagat. Els bits es numeren de dreta a esquerra. Ex.: 0 0 0 1 0 1 1 1 Número de bit 7 6 5 4 3 2 1 0 Les computadores treballen amb base 2 que és el sistema de numeració anomenat binari. Qualsevol número es pot representar amb binari, tot depenent de les posicions que ocupin els 0 i 1 dins el byte. Per poder representar un número decimal en binari, s'ha de tenir en compte que cada dígit binari representa la xifra 2 elevat a la potència que ocupi la posició del bit. Res millor que un exemple. Ex.: 0 0 0 1 0 1 1 1 Posició 7 6 5 4 3 2 1 0 Valor 27 26 25 24 23 22 21 20 Per saber quin número decimal representa un número en binari, cal substituir cada bit engegat (1) pel seu valor en base 2. Ex.: 0 0 0 1 0 1 1 1 Valor 24 22 21 20 Això és el mateix que dir... Valor 16 4 2 1 ...el resultat final és la suma dels valors, o sigui : 16 + 4 + 2 + 1 = 23 Ex.: 0011000 = 24 + 23 = 16 + 8 = 24 Per saber com es representa en binari un número decimal, cal anar dividint el número decimal per 2 i invertir els restos de la divisió. Ex.: 24 2 0 12 2 0 62 0 32 2 1 1 ...........Els restos de la divisió són : 00011, i si els invertim són: 11000, ara omplim els espais que queden a l'esquerra dels uns fins a que formi un grup de 8 bits 0011000 i ja tenim el número 24 representat en binari. D'altres conversions de sistemes s'expliquen a l'apartat 3. EXEMPLES APARTAT 1 Número a representar 24 65 42 0 128 255 Decimal 24 65 42 0 128 255 Binari 00011000 01000001 00101010 00000000 10000000 11111111 2.− Aritmètica binària Les operacions bàsiques que es poden fer són la suma i la resta. Mitjançant la combinació de sumes i/o restes, podem fer la resta d'operacions matemàtiques. Sumes : Els nombres binaris se sumen segons aquest model: 1 +0+0+1+1 0111 0 1 10 11 D'aquesta manera, si sumem dos 1 o bé tres 1, ens sobra un 1 que se sumarà a la propera xifra de l'esquerra com a les sumes normals. Ex.: 01000001 (65) + 00101010 (42) 01101011 (107) Per a les operacions amb negatius cal fer complement a 2 (veure Canviar de Signe). Restes : Els nombres en binari pur es resten com si fos una resta normal però, quan a dalt hi ha un 0 i abaix un 1, el 0 es converteix en 2 tot convertint el 1 més proper de l'esquerra en un 0. D'aquesta manera, podem fer la resta 2 3 − 1 = 1. Ex.: 00000101 (5) Això és com escriure 00000021 fixeu−vos que l'1 de l'es − 00000011 (3) querra del 0 passa a ser 0 i que el 0 passa a ser un 2. 00000010 (2) En el cas que hi hagi dos zeros seguits, s'ha d'anar a buscar l'u més proper de l'esquerra i deixar−lo a zero per treure−li un 2. 2 2 Ex.: 01010101 (85) És com fer : 0 1 0 1 0 1 0 1 de manera que − 00000110 (6) quedi : 0 1 0 0 2 0 2 1 per poder tornar a fer la ma− 01001111 (79) 2 teixa operació : 0 1 0 0 2 0 2 1 i així quedarà preparat per restar−lo : 0 1 0 0 1 2 2 1 Cal remarcar que, qualsevol número 1 que li robem un 2, es converteix en 0 i que qualsevol 2 que li robem un 2 es converteix en 1. Per a les operacions amb negatius cal fer complement a 2 (veure Canviar de Signe). Multiplicacions : Els nombres binaris es multipliquen com els nombres normals, o sigui cada xifra per cada xifra. Ex.: 00000111 (7) x 00000101 (5) 00000111 + 00000000 00000111 00100011 (35) Per a negatius es passa a positiu fent el complement a 2 (veure Canviar de Signe) i després es posa amb el signe que correspongui al final de l'operació. Divisions : Els nombres binaris es divideixen com el normals. Ex.: (66) 0 1 0 0 0 0 1 0 1 1 0 (6) a) Primer fem 1 x 110 = 110 i ho restem de − 1 1 0 1 0 1 1 (11) 1000010. Això dóna 010 4 0 1 0 0 b) Després baixem una xifra, en aquest cas el 0. − 0 0 0 c) Ara fem 0 x 110 = 000 i ho restem de 0100. Això dóna 100 1 0 0 1 d) Baixem una xifra, en aquest cas, l'1 − 1 1 0 e) Ara fem 1 x 110 = 110 i ho restem de 1001. 0 1 1 0 Això dóna 011. Baixem una xifra. El 0. − 1 1 0 f) Ara fem 1 x 110 = 110 i ho restem de 0110. 0 0 0 h) I ja tenim el resultat, que (en aquest cas) és exacte. Per a negatius es passa a positiu fent el complement a 2 (veure Canviar de Signe) i després es posa amb el signe que correspongui al final de l'operació. 3.− Sistemes de representació de nombres a les computadores Degut a les diferents arquitectures internes dels ordinadors i les seves necessitats de representació numèrica i càlcul, hi ha diferents maneres de representar les quantitats. Aquests són: · Binari pur o punt fix sense signe · Punt fix amb signe o signe magnitud (MS) − Per a nombres enters · Complement a 1 (C1) · Complement a 2 (C2) · Excés a X − Per a nombres amb coma flotant Coma flotant · Empaquetat − Per a nombres amb coma Decimal · Desempaquetat * Considerem que en qualsevol cas, la n representa el nombre de bits (normalment, 8). * S'anomena Mòdul a la part del byte que ens indica el número a representar. Les demés parts del byte (normalment el Signe) ens indiquen si és un número positiu o negatiu. Sabrem si un byte és positiu o negatiu segons si el seu bit més significatiu (el de l'esquerra) és 0 per a positiu o 1 per a negatiu, excepte en binari pur que no hi ha signe. En general serà (per exemple): 5 Un número negatiu 1 0 0 1 0 1 1 0 (−30) En aquest cas, n−1 serà : 8−1 = 7 perquè és un byte de 8 bits Signe Mòdul El mateix número Però en positiu 0 0 0 1 0 1 1 0 (+30) En aquest cas, n−1 serà : 8−1 = 7 perquè és un byte de 8 bits Signe Mòdul • Binari pur o punt fix sense signe La mateixa denominació ja ens indica que és l'única representació numèrica que no té signe. Això vol dir que fa servir tots els bits disponibles per representar els números. Mòdul El seu rang de representació és [0, 2n − 1] i això vol dir que si (per exemple) fos una paraula de 8 bits, el seu rang seria des de 0 fins 28 −1 (255). Com a molt, es pot representar el número 11111111 que és el mateix que 1x27 + 1x26 + 1x25 + 1x24 + 1x23 + 1x22 + 1x21 + 1x20 que és el mateix que 128+64+32+16+8+4+2+1 i això és igual a 255. Com que 2n = 256 i el seu rang de representació és 256−1, no cal fer totes les sumes abans indicades senzillament serà 256 − 1 = 255. A més del 255, cal recordar que també es pot representar el número zero (00000000). O sigui, en total es poden representar 256 números. Pot representar nombres Enters positius. • Punt fix amb signe o signe magnitud (MS) És com el binari pur però amb el bit més significatiu (el de l'esquerra) per a representar el signe del número. Signe Mòdul (en binari pur) El seu rang de representació és [−2n−1 + 1, 2n−1 − 1] i això vol dir que si (per exemple) fos una paraula de 8 bits, el seu rang seria des de −28−1 +1 (−127) fins 28−1 −1 (127). Com a molt, es pot representar el número 11111111 en negatiu i el 01111111 en positiu que és el mateix que dir signe(0/1)+1111111 i això és (1x26 + 1x25 + 1x24 + 1x23 + 1x22 + 1x21 + 1x20) que és el mateix que 64+32+16+8+4+2+1 i això és igual a 128. En el cas del negatiu serà −128+1 = −127 i en el positiu, 128−1 = 127. En aquest tipus de representació, el número 0 ens queda incorrecte, degut que el byte 10000000 és el 0 negatiu i el byte 00000000 és el 0 positiu. Pot representar nombres Enters positius i negatius. • Complement a 1 (C1) És com el binari pur per als números positius però el bit de signe (el més significatiu) no és representatiu de 6 cap valor. En els negatius, el que es fa és invertir el valor de cada bit excepte el de signe, o sigui, els 1 passen a ser 0 i els 0 passen a ser 1. Signe Mòdul (en binari pur) El seu rang de representació és [−2n−1 + 1, 2n−1 − 1] i això vol dir que si (per exemple) fos una paraula de 8 bits, el seu rang seria des de −28−1 +1 (−127) fins 28−1 −1 (127). Com a molt, es pot representar el número 11111111 en negatiu i el 01111111 en positiu que és el mateix que dir signe(0/1)+1111111 i això és (1x26 + 1x25 + 1x24 + 1x23 + 1x22 + 1x21 + 1x20) que és el mateix que 64+32+16+8+4+2+1 i això és igual a 128. En el cas del negatiu serà −128+1 = −127 i en el positiu, 128−1 = 127. En aquest tipus de representació, el número 0 ens queda incorrecte, degut que el byte 11111111 és el 0 negatiu i el byte 00000000 és el 0 positiu. Pot representar nombres Enters positius i negatius. • Complement a 2 (C2) És com el binari pur per als números positius però el bit de signe (el més significatiu) no és representatiu de cap valor. En els negatius, el que es fa és invertir el valor de cada bit excepte el de signe, o sigui, els 1 passen a ser 0 i els 0 passen a ser 1 i a més, se li suma un 1. Signe Mòdul (en binari pur) El seu rang de representació és [−2n−1, 2n−1 − 1] i això vol dir que si (per exemple) fos una paraula de 8 bits, el seu rang seria des de −28−1 (−128) fins 28−1 −1 (127). Com a molt, es pot representar el número 10000000 en negatiu i el 01111111 en positiu que és el mateix que dir 01111111 i això és (1x26 + 1x25 + 1x24 + 1x23 + 1x22 + 1x21 + 1x20) que és el mateix que 64+32+16+8+4+2+1 i això és igual a 128. En el cas del positiu serà 128−1 = 127. El negatiu es fa bescanviant els signes del byte, que en el supòsit 10000000 seria 01111111 i, a més, se li afegeix un 1 quedant: 10000000 i aquest número és el, 128 = −128. Pot representar nombres Enters positius i negatius. • Excés a X Aquesta representació no té espai per al signe. Això vol dir que fa servir tots els bits disponibles per representar els números. És fa com el binari pur. Normalment la X és un 2, o sigui que és Excés a 2. La utilitat d'aquest sistema és per representar els exponents per a la representació de nombres en coma flotant (veure pròxim apartat: Coma flotant) Mòdul (en binari pur) El seu rang de representació és [−2n−1, 2n−1 − 1] . Tot es fa com en binari pur. Cal recordar, però, que es fa sumant l'exponent a l'excés. Tant la base com l'excés, sempre venen donats pel fabricant de la màquina. En cas que no sigui així, el nombre serà el número a representar + l'excés (normalment és 2n−1 = 128). En el supòsit que volguéssim representar el número 00010110 (30) en excés a 2 seria : primer es passa a nombre amb decimals, o sigui, 0,00010110 x 2(excés)10 a partir d'aquí és on es fa l'operació. Ara sabem que la l'exponent és 10 i que l'excés és 2n−1 = 128 = 10000000. Ara solament manca sumar l'exponent i l'excés, i això seria 00001010 + 10000000 = 10001010. D'aquesta manera ja sabem l'excés 2 del número 30. Pot representar nombres enters positius i negatius. • Coma flotant 7 Serveix per a representar nombres Reals i Enters amb un major grau de representació que si es representessin en punt fix però la precissió de representació dels nombres és menor. Primerament cal aclarir tres definicions : Mantissa : És com si fos el Mòdul. Mantissa o magnitud és un nombre representat en binari i amb el punt decimal a l'esquerra d'aquest. O sigui, la mantissa del número 00010110 és 0,00010110. Es representa en MS, C1 o C2. Base : S'anomena base d'exponentació o ràdix al número que multiplicarà la mantissa per donar el número original. Normalment és 2, però pot ser : 8, 16, etc. Exponent : S'anomena exponent o característica a l'exponent al qual s'eleva la base d'exponentació per la qual s'ha de mutiplicar la mantissa. Es representa en MS o bé en Excés a 2. En el cas del número 30 seria : 30 en binari és 00010110. Això és el mateix que 0,00010110 x 210 . Per tant, la Mantissa és 0,00010110, la Base és 2 i l'Exponent és 10. La Base i l'Exponent es posen en Excés a 2 = Excés (2n−1 = 128 = 10000000) + Exponent (10 = 00001010) = 10001010 Exponent (excés a 2) Signe Mantissa (binari pur) Pot representar nombres enters positius i negatius. • Decimal (BCD) Els nombres en BCD (decimal codificat en binari) necessiten 4 o 8 bits per representar cada xifra en decimal, la qual cosa vol dir que els únics números i/o símbols que es poden representar són : Xifra decimal BCD Empaquetat 4 bits 0 BCD Desempaquetat 8 bits 1 2 3 4 5 6 7 8 9 0000 00000000 0001 00000001 0010 00000010 0011 00000011 0100 00000100 0101 00000101 0110 00000110 8 Símbol + − , Espai buit 1100 XXXX1100 1101 XXXX1101 1110 · Decimal (BCD) empaquetat 1110XXXX 1111XXXX 1111 Cada xifra decimal ocupa mitja paraula, normalment, 4 bits (tot i que els bytes són de 8 bits cada un) excepte el primer byte de la dreta que en els 4 bits de la dreta duu el signe representat per la lletra C = 1100 en el cas dels números positius i D = 1101 pels negatius. Així mateix, la coma es representa per la lletra E = 1110. En cas que s'hagi d'acabar d'omplir el byte per l'esquerra, es fa amb zeros. Cada xifra (excepte les unitats) es representaria així: Mòdul (en binari pur) Mòdul (en binari pur) ...i la xifra de les unitats, és la que expressa el signe en els seus 4 bits de la dreta. Les unitats es representen així: Mòdul (en binari pur) Signe Si, per exemple, es vol representar un número positiu d'una xifra (3), es fa posant el número 3 en binari = 0011 i, com que manquen 4 bits per aconsseguir un byte de 8 bits, s'utilitzen per a posar−hi el signe. De manera que queda així : 0011 (per representar el 3) i 1100 (per representar el positiu) = 0011 1100 (8 bits) Si, per exemple, es vol representar un número positiu de dues xifres (−35), es fa posant el número 3 en binari = 0011, el 5 en binari = 0101 i el signe negatiu en binari = 1101. Tot plegat quedarà : 0011 0101 1101 El que passa és que si ho deixem així, tenim un byte (8 bits) i mig, la qual cosa fa tornar boig a qualsevol processador que treballi amb paraules de 8 bits. Per solucionar aquest tema, el que es fa és omplir amb 4 zeros l'esquerra del número, o sigui que ens queda 0000 0011 0101 1101 i ja està. El millor és posar diversos exemples: Xifra decimal 0 BCD Empaquetat (4 bits) 0000 1100 També es representa com : 0C 3 0011 1100 3C −3 0011 1101 3D 35 0000 0011 0101 1100 35C −35 0000 0011 0101 1101 035D 125 0001 0010 0101 1100 125C −125 0001 0010 0101 1101 125D 9 3746 0000 0011 0111 0100 0110 1100 3746C −3746 0000 0011 0111 0100 0110 1101 3746D El seu rang de representació és tots els nombres Enters o Fraccionaris positius i negatius. · Decimal (BCD) desempaquetat Cada xifra decimal ocupa una paraula, normalment 8 bits (un byte), excepte el primer byte de la dreta que en els 4 bits de la dreta duu el signe representat per la lletra C = 1100 en el cas dels números positius i D = 1101 pels negatius. Així mateix, la coma es representa per la lletra E = 1110. En cas que s'hagi d'acabar d'omplir el byte per l'esquerra, es fa amb zeros. Cada xifra (excepte les unitats) es representaria així: Sempre és així Mòdul (en binari pur) ...i la xifra de les unitats, és la que expressa el signe en els seus 4 bits de la dreta. Les unitats es representen així: Mòdul (en binari pur) Signe Si, per exemple, es vol representar un número positiu d'una xifra (3), es fa posant el número 3 en binari = 0011 i, com que manquen 4 bits per aconsseguir un byte de 8 bits, s'utilitzen per a posar−hi el signe. De manera que queda així : 0011 (per representar el 3) i 1100 (per representar el positiu) = 0011 1100 (8 bits) Si, per exemple, es vol representar un número positiu de dues xifres (−35), es fa posant el número 3 en binari = 0011 i s'hi afegeix 1111 per l'esquerra = 1111 0011, el 5 en binari = 0101 i s'hi afegeix el signe negatiu en binari = 1101 per la dreta = 0101 1101. Tot plegat quedarà : 111 0011 0101 1101. El millor és posar diversos exemples: Xifra decimal 0 BCD desempaquetat (8 bits) També es representa com : 0000 1100 C0 0011 1100 C3 0011 1101 D3 1111 0011 0101 1100 F3C5 1111 0011 0101 1101 F3D5 3 −3 35 −35 125 −125 3746 −3746 El seu rang de representació és 1111 tots els nombres Enters o Fraccionaris positius 1111 0001 0010 0101 1100 F1F2C5i negatius. 1111 0001 1111 0010 0101 1101 F1F2D5 1111 0011 1111 0111 1111 0100 0110 1100 F3F7F4C6 10 Un nombre amb decimals fet en BCD, es faria afegint la coma (1110): Xifra decimal BCD empaquetat (4 bits) 78,5 789,67 326,544 −35,02 Xifra decimal 78,5 789,67 326,544 −35,02 0000 0111 1000 1110 0101 1100 0000 0111 1000 1001 1110 0110 0111 1100 0011 0010 0110 1110 0101 0100 0100 1100 BCD desempaquetat 0011 0101 1110 0000 0010 1101 (8 bits) 1111 0111 1111 1000 1111 1110 1111 0101 1111 1100 1111 0111 1111 1000 1111 1001 1111 1110 1111 0110 1111 0111 1111 1100 1111 0011 1111 0010 1111 0110 1111 1110 1111 0101 1111 0100 1111 0100 1111 1100 1111 0011 1111 0101 1111 1110 1111 0000 1111 Xifra decimal En 0010 En 1111 1101 empaquetat desempaquetat 78,5 789,67 326,544 −35,02 78E67C F7F8E6C7 789E67C F7F8F9E6C7 326E544C F3F2F6E5F4C4 Pot representar nombres positius, negatius i/o amb coma. 35E02D • Quadre d'exemples F3E5F0D2 Aquest apartat és per exemplificar diferents tipus de representació numèrica. Després del quadre, hi ha una explicació del procediment per a passar de binari a qualsevol sistema. Suposant bytes de 5 bits. Quin número representaria en cada sistema? Representació 11111 Binari pur Signe magnitud Complement a Complement a Excés 16 (MS) 1 (C1) 2 (C2) 31 −15 −0 −1 15 11 11110 11101 11100 11011 11010 11001 11000 10111 10110 10101 10100 10011 10010 10001 10000 01111 01110 01101 01100 01011 01010 01001 01000 00111 00110 00101 00100 00011 00010 00001 00000 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 −14 −13 −12 −11 −10 −9 −8 −7 −6 −5 −4 −3 −2 −1 −0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 −1 −2 −3 −4 −5 −6 −7 −8 −9 −10 −11 −12 −13 −14 −15 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 −2 −3 −4 −5 −6 −7 −8 −9 −10 −11 −12 −13 −14 −15 −16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 −1 −2 −3 −4 −5 −6 −7 −8 −9 −10 −11 −12 −13 −14 −15 −16 Com es fa la conversió del quadre anterior, o bé, Com saber quin número és en cada tipus de representació un número escrit en binari? −DE BINARI A Binari pur: Ex.: 1 0 1 1 1 Quin nombre representa en binari pur ? 1x24 + 0x23 + 1x22 + 1x21 + 1x20 = 16 + 0 + 4 + 2 + 1 = 23 −DE BINARI A Signe magnitud (MS): Ex.: 1 0 1 1 1 (23) Quin nombre representa en signe magnitud ? Cal recordar que el bit més significatiu (el de l'esquerra) ens indica el signe (en aquest cas, negatiu). 12 Signe negatiu (0x23 + 1x22 + 1x21 + 1x20) = − (0 + 4 + 2 + 1) = − 7 Ex.: 0 0 1 1 1 (7) Quin nombre representa en signe magnitud ? Cal recordar que el bit més significatiu (el de l'esquerra) ens indica el signe (en aquest cas, positiu). Signe positiu (0x23 + 1x22 + 1x21 + 1x20) = (0 + 4 + 2 + 1) = 7 −DE BINARI A Complement a 1 (C1): Ex.: 0 0 1 1 1 (7) Quin nombre representa en complement a 1 ? Cal recordar que el bit més significatiu (el de l'esquerra) ens indica el signe (en aquest cas, positiu). 0x23 + 1x22 + 1x21 + 1x20 = 0 + 4 + 2 + 1 = 7 Ex.: 1 0 1 1 1 (23) Quin nombre representa en complement a 1 ? Cal recordar que el bit més significatiu (el de l'esquerra) ens indica el signe (en aquest cas, negatiu). Ara invertim tots els bits excepte el del signe. O sigui, 11000 Signe negatiu (1x23 + 0x22 + 0x21 + 0x20) = − (8 + 0 + 0 + 0) = − 8 −DE BINARI A Complement a 2 (C2): Ex.: 0 0 1 1 1 (7) Quin nombre representa en complement a 2 ? Cal recordar que el bit més significatiu (el de l'esquerra) ens indica el signe (en aquest cas, positiu). 0x23 + 1x22 + 1x21 + 1x20 = 0 + 4 + 2 + 1 = 7 Ex.: 1 0 1 1 1 (23) Quin nombre representa en complement a 2 ? Cal recordar que el bit més significatiu (el de l'esquerra) ens indica el signe (en aquest cas, negatiu). Ara invertim tots els bits excepte el del signe i li sumem 1. O sigui, 11000+1 = 11001 Signe negatiu (1x23 + 0x22 + 0x21 + 1x20) = − (8 + 0 + 0 + 1) = − 9 −DE BINARI A Excés 16: S'ha de restar l'excés a el nombre en binari. Ex.: 1 0 1 1 1 (23) Quin nombre representa en excés 16 ? +1 0 0 0 0 (−16) Cal convertir primer el 16 en −16, o sigui, fer el complement a dos del 16 10000 = 11111 + 1 = 10000 (−16). Recordeu 0 0 1 1 1 (7) que el bit del signe no es compta. La cosa es complica amb els números negatius. 13 Ex.: 0 0 1 0 1 (5) Quin nombre representa en excés 16 ? +1 0 0 0 0 (−16) 1 0 1 0 1 (−11) S'ha de complementar a 2 per saber quin número representa ja que és negatiu. I això es fa : 1 0 1 0 1 = 1 1 0 1 0 + 1 = 1 1 0 1 1 (11). Recordeu que el bit del signe no es compta. Ara fem un quadre per veure com es representen els mateixos números decimals en els diferents sistemes de representació. Suposant bytes de 5 bits. Com seria un número decimal en cada sistema? Número a representar 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 −1 −2 −3 −4 −5 −6 −7 −8 −9 −10 −11 −12 −13 Binari pur 10000 01111 01110 01101 01100 01011 01010 01001 01000 00111 00110 00101 00100 00011 00010 00001 00000 −−−−− −−−−− −−−−− −−−−− −−−−− −−−−− −−−−− −−−−− −−−−− −−−−− −−−−− −−−−− −−−−− Signe magnitud Complement a (MS) 1 (C1) −−−−− −−−−− 01111 01111 01110 01110 01101 01101 01100 01100 01011 01011 01010 01010 01001 01001 01000 01000 00111 00111 00110 00110 00101 00101 00100 00100 00011 00011 00010 00010 00001 00001 00000 00000 10001 11110 10010 11101 10011 11100 10100 11011 10101 11010 10110 11001 10111 11000 11000 10111 11001 10110 11010 10101 11011 10100 11100 10011 11101 10010 Complement a 2 (C2) −−−−− 01111 01110 01101 01100 01011 01010 01001 01000 00111 00110 00101 00100 00011 00010 00001 00000 11111 11110 11101 11100 11011 11010 11001 11000 10111 10110 10101 10100 10011 Excés 16 −−−−− 11111 11110 11101 11100 11011 11010 11001 11000 10111 10110 10101 10100 10011 10010 10001 10000 01111 01110 01101 01100 01011 01010 01001 01000 00111 00110 00101 00100 00011 14 −14 −15 −16 −−−−− −−−−− −−−−− 11110 11111 −−−−− 10001 10000 −−−−− 10010 10001 10000 00010 00001 00000 Com es fa la conversió del quadre anterior, o bé, Com saber com es representa un número en cada sistema (suposant bytes de 5 bits)? −DE DECIMAL A Binari pur: Ex.: Com es representa el número 9 en binari pur? (Veure apartat 1.− Introducció) El número 9 és el mateix que dir: 23 + 20 = 8 + 1 = 9. Per tant serà : 0 1 0 0 1 perquè això vol dir: 0x24 + 1x23 + 0x22 + 0x21 + 1x20 = 0 + 8 + 0 + 0 + 1 = 9 −DE DECIMAL A Signe magnitud (MS): Ex.: Com es representa el número 9 en Signe Magnitud? Per a els nombres positius, es igual que en Binari pur, o sigui que serà 0 1 0 0 1. Ex.: Com es representa el número −9 en Signe Magnitud? Cal recordar que el bit més significatiu (el de l'esquerra) ha d'indicar el signe (en aquest cas, negatiu). Per això, si en positiu és 01001, en negatiu serà igual però amb el bit de signe en posició encès, o sigui 1. D'aquesta manera queda que el −9 es representa com a 1 1 0 0 1 −DE DECIMAL A Complement a 1 (C1): Ex.: Com es representa el número 9 en Complement a 1? Per a els nombres positius, es igual que en Binari pur, o sigui que serà 0 1 0 0 1. Ex.: Com es representa el número −9 en Complement a 1? Cal recordar que el bit més significatiu (el de l'esquerra) ha d'indicar el signe (en aquest cas, negatiu) i per això, aquest bit no s'utilitza per a representar cap quantitat. El que es fa per a representar números negatius en C1 és invertir el valor de cada bit excepte el del signe. Per això, si en positiu és 01001, en negatiu serà igual però amb el bit de signe en posició encès, o sigui 1 = 11001, i a més, cal invertir la resta de bits, de manera que quedarà 1 0 1 1 0. −DE DECIMAL A Complement a 2 (C2): 15 Ex.: Com es representa el número 9 en Complement a 2? Per a els nombres positius, es igual que en Binari pur, o sigui que serà 0 1 0 0 1. Ex.: Com es representa el número −9 en Complement a 2? Cal recordar que el bit més significatiu (el de l'esquerra) ha d'indicar el signe (en aquest cas, negatiu) i per això, aquest bit no s'utilitza per a representar cap quantitat. El que es fa per a representar números negatius en C2 és invertir el valor de cada bit excepte el del signe i sumar−hi un 1. Per això, si en positiu és 01001, en negatiu serà igual però amb el bit de signe en posició encès, o sigui 1 = 11001, ara cal invertir la resta de bits, de manera que quedarà 10110 i (finalment) sumar−hi un 1, o sigui : 10110 + 1 = 1 0 1 1 1. −DE DECIMAL A Excés 16: Ex.: Com es representa el número 9 en Excés 16? El que cal fer és sumar−hi el número 16 en binari pur a el número 9 en binari pur. 0 1 0 0 1 (és el 9 en binari pur) + 1 0 0 0 0 (és el 16 en binari pur) 11001 Ex.: Com es representa el número −9 en Excés 16? Cal recordar que el bit més significatiu (el de l'esquerra) ha d'indicar el signe (en aquest cas, negatiu) i per això, aquest bit no s'utilitza per a representar cap quantitat. El que es fa per a representar números negatius és complementar−los a 2 (veure DE DECIMAL A Complement a 2) de manera que quedarà 1 0 1 1 1 i seguidament, sumar−hi el 16 en binari pur i ens queda 0 0 1 1 1. Vegem−ho : 1 0 1 1 1 (número −9 en C2) + 1 0 0 0 0 (número 16 en binari pur) 1 0 0 1 1 1 (el 1 de l'esquerra del tot, provoca desbordament, o sigui que no es té en compta). • Exemples extesos 16 EXEMPLE PER A NOMBRES AMB COMA FLOTANT El millor és un parell d'exemples. 1.− Un ordinador té paraules de 32 bits i representa els nombres reals en punt flotant de la manera següent: · Cada nombre en punt flotant ocupa una paraula. · Al primer byte hi ha l'exponent d'una base 2 representat en excés 128. · Els altres tres bytes estan ocupats per la mantissa representada en signe−magnitud, fraccionària, normalitzada i amb el punt binari a l'esquerra del bit més significatiu (és a dir, de la forma 0.1...). Representeu en el format esmentat el número 625 La solució seria : Plantejem tots els passos i després muntem el número sencer. PASSOS : 1.− Escriure 625 en binari pur => 1001110001 2.− Escrit en forma exponencial és => 0.1001110001 x 210 3.− El signe del número 625 és positiu, o sigui => 0 4.− Segons l'enunciat, el primer byte hi ha l'exponent d'una base 2 representat en excés 128. Això vol dir que hem de fer l'operació Excés a 2, i això es fa: primer hem d'escriure l'excés (128) en binari => 10000000 i després sumar−li l'exponent (10) => 00001010. Si fem aquesta operació 10000000 + 00001010 ens dona => 10001010 i d'aquesta manera ja tenim el que s'anomena Exponent (mireu la solució). 5.− El Signe es representa igual que en qualsevol sistema binari, o sigui, a l'esquerra del byte, que en aquest cas l'anomenem Magnitud (mireu la solució fixanvos que els bits ocupats per la Magnitud són 23 i no pas 24 ja que l'últim és el Signe). 6.− La Magnitud és el número 0.1001110001 (explicat al punt 2) però sense el 0 de l'esquerra. A més, manquen espais a la dreta per arribar a fer els tres bytes ocupats per la Mantissa que diu l'enunciat. Per tant, el número serà => 1001110 00100000 00000000. Si ajuntem tots els passos que hem fet, ens queda de la següent manera: Exponent Signe Magnitud o Mantissa (és el mateix) 10001010 0 1001110 00100000 00000000 8 bits 1 bite 7 bits 8 bits 8 bits total : 32 bits (paraules de 32 bits tal com deia l'enunciat). 17 En cas que el número a representar fos decimal, per exemple 0.1575, s'ha d'anar amb compte perquè l'Exponent és negatiu i s'ha de fer el 2 en binari però complementat a dos, o sigui : 2 en binari pur és => 00000010, en C2 s'inverteixen els bits i se li suma 1. 00000010 => 11111101 + 1 = 11111110 i ara cal sumar'li l'Excés. O sigui: 11111110 + 10000000 01111110 2.− Com passar un número amb decimals (77.45827325) a coma flotant? Primer hem de fer el número que està a l'esquerra de la coma i després s'han de fer els decimals de la manera que s'explica a continuació: Per passar números amb decimals a binari, es fa: 1.− El número que està a l'esquerra de la coma (en aquest cas 77) es fa de la manera tradicional (veure Introducció). 2.− Ara bé la part ..........ni difícil ni senzilla, diferent!! En aquest cas, el número que volem convertir és el 45827325, OK? Hem d'imaginar dues columnes tal que así: 0,45827325 0,9165464 0,8330928 0,6661856 0,3323712 0,6647424 0,3294848 0,6589696 0,3179392 0,6358784 0,2717568 0,5435136 0,0870272 0,1740544 0,3481088 0,6962176 Multiplicat per 2 = Multiplicat per 2 = 0,9165464 (copiar aquest número a la columna de l'esquerra) 1,8330928 (copiar aquest número a la columna de l'esquerra però sense el número de l'esquerra perquè no és decimal) Multiplicat per 2 = Multiplicat per 2 = 1,6661856 (fer el mateix d'abans) 1,3323712 (fer el mateix d'abans, cal fer−ho cada cop que quedin números al lloc de les unitats) Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = Multiplicat per 2 = 0,6647424 1,3294848 0,6589696 1,3179392 0,6358784 1,2717568 0,5435136 1,0870272 0,1740544 0,3481088 0,6962176 1,3924352 Del que es tracta ara és d'agafar els dígits que queden a l'esquerra de la coma dels números de la columna de la dreta i ajuntar−los. Així quedaria : 0111010101010001 18 El que s'ha de recordar és que el zero del primer número (0,45827325) no compta a l'hora d'extreure el número final. Tot junt serà : 0.10011010111010101010001 x 27 (els que estan en negreta són els decimals) Al final queda : Exponent Signe Magnitud 10000111 0 100 1101 0111 0101 0101 0001 (77) (,45827325) 4.− Canviar de signe El que s'ha de fer per a canviar de signe un número representat en binari és complementar−lo a 2 (veure complement a 2) . O sigui, per a convertir un número positiu en negatiu (o a l'inrevés) s'inverteixen tots els bits del número i −despres− se li suma un 1 al resultat obtingut. Per saber el valor positiu d'un nombre en binari (els que tenen el bit de l'esquerra a 0), es fa com el binari pur, en canvi, pels negatius s'ha de convertir primer en positiu per a saber quin número representa. Ex.: 01000001 (65) Complementat a 2 => 10111110 + 1 => 10111111 Com que treballem en C2, el número 10111111 ens indica que és negatiu perquè el bit de signe és un 1. Per tant, si volem saber quin número representa un número en negatiu, l'hem de tornar a complementar a 2. L'avantatge d'aquest sistema és que en les operacions de suma i resta, no cal fer cap conversió, se sumen o resten directament els números. Ex.: Per fer 65 −30 = 35 −30 => 00011110 (30) en complement a 2 => 11100001 + 1 = 11100010 01000001 (65) +11100010 (−30) 100100011 (35) El bit de l'esquerra que està en negreta no es té en compte perquè sinó sumaria 9 bits. El fet de passar d'aquest bit se l'anomena desbordament. Ex.: Per fer − 65 −30 = − 35 −65 => 01000001 (65) en complement a 2 => 10111110 + 1 = 10111111 −30 => 00011110 (30) en complement a 2 => 11100001 + 1 = 11100010 10111111 (−65) 19 +11100010 (−30) 110100001 (−95) El bit de l'esquerra que està en negreta no es té en compte sabem que és −95 perquè fem el complement a 2 del número 10100001 => 01011110 + 1 = 01011111 i aquest número és 95 5.− Canvis de sistema de numeració Primerament, posem dos exemples que, en general, són vàlids per recordar com passar de decimal a qualsevol base i de qualsevol base a decimal i, després ho analitzem cas per cas. • De DECIMAL a QUALSEVOL BASE: Suposem el número 137 en decimal i el volem passar a base 8. Cal anar dividint el número decimal per la base en aquest cas el número 8 i invertir els restos de la divisió. Ex.: 137 8 57 1 17 8 12 ...........Els restos de la divisió són : 1 1 2, i si els invertim són: 211 ja tenim el número 137 en base 8. Comuntment s'indica d'aquesta manera : 1378) • De QUALSEVOL BASE a DECIMAL: Suposem el número 211 en base 8 i el volem passar a decimal. Hi ha dues maneres de fer−ho: • Fer com si féssim Ruffini. Ex.: Número en base 8 + 16 +136 Base 2 17 137 Recordeu que això es feia: a) Baixar el 2 que està en negreta. b) Multiplicar 8 per 2. c) Sumar el 1 i el 16. d) Multiplicar 8 per 17. e) Sumar el 1 i el 136. D'aquesta manera obtenim el número 137 que és el 2118) en decimal. 20 • Elevar a la potencia cada número: Ex.: Número a representar: 2118) 2 · 82 + 1 · 81 + 1 · 80 => 2 · 64 + 1 · 8 + 1 · 1 => 128 + 8 + 1 => 137 D'aquesta manera obtenim el mateix número que com si ho féssim per Ruffini. Ara passem a descriure mètode per mètode de conversions entre sistemes. CANVIS DE SISTEMES DE NUMERACIÓ : − DE DECIMAL A BINARI: Per saber com es representa en binari un número decimal, cal anar dividint el número decimal per 2 i invertir els restos de la divisió. Com es representa el número 24 en binari? Ex.: 24 2 0 12 2 0 62 0 32 1 1 ...........Els restos de la divisió són : 00011, i si els invertim són: 11000, ara omplim els espais que queden a l'esquerra dels uns fins a que formi un grup de 8 bits 0011000 i ja tenim el número 24 representat en binari. − DE DECIMAL A OCTAL: Per saber com es representa en octal un número decimal, cal anar dividint el número decimal per 8 i invertir els restos de la divisió. Com es representa el número 6887 en octal? Ex.: 6887 8 48 21 07 860 8 06 60 107 8 4 27 3 13 8 51 ...........Els restos de la divisió són : 74351, i si els invertim són: 15347 i d'aquesta forma hem obtingut el número 24 representat en octal. − DE DECIMAL A HEXADECIMAL: Per saber com es representa en hexadecimal un número decimal, cal anar dividint el número decimal per 16 i invertir els restos de la divisió. Com es representa el número 6887 en hexadecimal? Ex.: 6887 16 48 07 430 16 110 14 26 16 10 1 Cal tenir en compte que (en hexadecimal) els nombres decimals de dues xifres, es representen amb lletres seguint la taula següent : D'aquest manera tenim que els restos de la divisió són : 7 14 10 1, i si els invertim són: 1 10 14 7 ara cal substituir els números de dues xifres per les lletres de la taula del costat i així ens quedarà que el número 6887 en hexadecimal serà 1AE7 − DE BINARI A DECIMAL: Els nombres en binari són en Base 2. O sigui, que cada dígit del nombre en binari es multiplicarà per el 22 número 2 elevat a una determinada potència. Cal fer esment que els números que poden representar una determinada Base, com a màxim poden ser expressats amb un número menor que la Base. Això vol dir que si parlem de Base 2, els números vindran representats per combinacions de zeros i uns. Si parlem de Base 8, els números vindran representats per combinacions de 0, 1, 2, 3, 4, 5, 6 i/o 7. Però mai hi haurà cap 8. L'explicació del perquè és matemàtica i no entra dins aquest contexte. Per saber com es representa en decimal un número en binari, cal elevar el número 2 a la potència de l'exponent que li correspongui a la seva situació dins el byte. Ex.: Com es representa el número binari 00101101 en decimal? 0 · 27 + 0 · 26 + 1 · 25 + 0 · 24 + 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 => 0·128 + 0·64 + 1·32 + 0·16 + 1·8 + 1·4 + 0·2 + 1·1 => 32 + 8 + 4 + 1 => 45 − DE BINARI A OCTAL: Els nombres en binari són en Base 2. O sigui, que cada dígit del nombre en binari es multiplicarà per el número 2 elevat a una determinada potència. Cal fer esment que els números que poden representar una determinada Base, com a màxim poden ser expressats amb un número menor que la Base. Això vol dir que si parlem de Base 2, els números vindran representats per combinacions de zeros i uns. Si parlem de Base 8, els números vindran representats per combinacions de 0, 1, 2, 3, 4, 5, 6 i/o 7. Però mai hi haurà cap 8. L'explicació del perquè és matemàtica i no entra dins aquest contexte. Per saber com es representa en octal un número en binari, cal dividir el byte en blocs de 3 bits i passar aquests blocs a decimal. Ex.: Com es representa el número binari 00101101 en octal? Primer dividim el byte en blocs de 3 bits començant per la dreta: 00 − 101 − 101 ...com que l'últim bloc de l'esquerra li falten dígits per fer un bloc de 3, l'omplim amb zeros, de manera que quedarà : 000 − 101 − 101 Ara cal convertir cada bloc de 3 bits a decimal: 000 = 0 101 = 5 101 = 5 D'aquesta manera ja solament cal ajuntar els dígits : 055. 23 O sigui que el número 00101101 en octal és el 55 − DE BINARI A HEXADECIMAL: Els nombres en binari són en Base 2. O sigui, que cada dígit del nombre en binari es multiplicarà per el número 2 elevat a una determinada potència. Cal fer esment que els números que poden representar una determinada Base, com a màxim poden ser expressats amb un número menor que la Base. Això vol dir que si parlem de Base 2, els números vindran representats per combinacions de zeros i uns. Si parlem de Base 8, els números vindran representats per combinacions de 0, 1, 2, 3, 4, 5, 6 i/o 7. Però mai hi haurà cap 8. L'explicació del perquè és matemàtica i no entra dins aquest contexte. Per saber com es representa en hexadecimal un número en binari, cal dividir el byte en blocs de 4 bits i passar aquests blocs a decimal. Cal tenir en compte la taula exposada a la conversió (DE DECIMAL A HEXADECIMAL) Ex.: Com es representa el número binari 00101101 en hexadecimal? Primer dividim el byte en blocs de 4 bits començant per la dreta: 0010 − 1101 Ara cal convertir cada bloc de 4 bits a decimal: 0010 = 2 1101 = 13 = D (recordeu que els números de dues xifres corresponen a alguna lletra segons la taula de DECIMAL A HEXADECIMAL). D'aquesta manera ja solament cal ajuntar els dígits : 2D. O sigui que el número 00101101 en hexadecimal és el 2D − D'OCTAL A DECIMAL: Els nombres en binari són en Base 2. O sigui, que cada dígit del nombre en binari es multiplicarà per el número 2 elevat a una determinada potència. Doncs bé, els nombres en octal són en Base 8 Cal fer esment que els números que poden representar una determinada Base, com a màxim poden ser expressats amb un número menor que la Base. Això vol dir que si parlem de Base 2, els números vindran representats per combinacions de zeros i uns. Si parlem de Base 8, els números vindran representats per combinacions de 0, 1, 2, 3, 4, 5, 6 i/o 7. Però mai hi haurà cap 8. L'explicació del perquè és matemàtica i no entra dins aquest contexte. Per saber com es representa en decimal un número en octal, cal elevar el número 8 a la potència de l'exponent que li correspongui a la seva situació dins el byte. 24 Ex.: Com es representa el número octal 15347 en decimal? 1 · 84 + 5 · 83 + 3 · 82 + 4 · 81 + 7 · 80 => 1·4096 + 5·512 + 3·64 + 4·8 + 7·1 => 4096 + 2560 + 192 + 32 + 7 => 6887 − D'OCTAL A BINARI: Per saber com es representa en binari un número en octal, cal substituir cada dígit per la seva representació en binari com si fossin paraules de 3 bytes. Ex.: Com es representa el número octal 75 en binari? Primer representem cada dígit en binari en blocs de 3 bits: 7 = 110 5 = 101 Ara ajuntem les dues representacions : 110 − 101 ...com que el que volem (normalment) és omplir un byte de 8 bits i solament tenim 6 bits, el que hem de fer és omplir el byte amb zeros a l'esquerra. De manera que ens quedarà : 00 110101 O sigui que el número 75 octal és el 00110101 en binari. − D'OCTAL A HEXADECIMAL: Per saber com es representa en hexadecimal un número en octal, cal passar−lo primer a binari i de binari a hexadecimal. − D'HEXADECIMAL A DECIMAL: Els nombres en binari són en Base 2. O sigui, que cada dígit del nombre en binari es multiplicarà per el número 2 elevat a una determinada potència. Doncs bé, els nombres en hexadecimal són en Base 16 Cal fer esment que els números que poden representar una determinada Base, com a màxim poden ser expressats amb un número menor que la Base. Això vol dir que si parlem de Base 2, els números vindran representats per combinacions de zeros i uns. Si parlem de Base 16, els números vindran representats per combinacions de 0, 1, 2, 3, ... 14 i/o 15. Però mai hi podrà haver cap 16. Recordeu però, que els números del 10 al 15 es representen amb les lletres: de l'A fins l'F respectivament. Per saber com es representa en decimal un número en hexadecimal, cal elevar el número 16 a la potència de l'exponent que li correspongui a la seva situació dins el byte. Ex.: Com es representa el número hexadecimal 1AE7 en decimal? 25 Primer cal saber a quin número correspon les lletres A i E (veure la taula de DECIMAL A HEXADECIMAL) D'aquesta manera tenim que són els números: 1 − 10 − 14 − 7 .... I ara cal multiplicar cada número per 16 elevat a la potència de la posició que li correspon : 1 · 163 + 14 · 162 + 14 · 161 + 7 · 160 => 1·4096 + 10·256 + 14·16 + 7·1 => 4096 + 2560 + 224 + 7 => 6887 − D'HEXADECIMAL A BINARI: Per saber com es representa en binari un número en hexadecimal, cal substituir cada dígit per la seva representació en binari com si fossin paraules de 4 bytes. Cal tenir en compte la taula exposada a la conversió (DE DECIMAL A HEXADECIMAL) Ex.: Com es representa el número hexadecimal 1AE7 en binari? Primer representem cada dígit en binari en blocs de 4 bits segons la taula que hem esmentat anteriorment: 1 = 0001 A = (10) = 1010 E = (14) = 1110 7 = 0111 Ara ajuntem les quatre representacions : 0001 − 1010 − 1110 − 0111 D'aquesta manera que ens quedarà : 0001101011100111 O sigui que el número 1AE7 hexadecimal és el 0001101011100111 en binari. − D'HEXADECIMAL A OCTAL: Per saber com es representa en octal un número en hexadecimal, cal passar−lo primer a binari i de binari a octal. • Esquema Conversions diferents sistemes de numeració 20 Universitat Oberta de Catalunya Introducció a la Informàtica 20 n−1 bits 1 n−1 bits 1 26 n−1 bits 1 n bits 00010110 10001010 0: 0000 8: 1000 1: 0001 9: 1001 2: 0010 A: 1010 3: 0011 B: 1011 4: 0100 C: 1100 5: 0101 D: 1101 6: 0110 E: 1110 7: 0111 F: 1111 SISTEMA HEXADECIMAL SISTEMA OCTAL SISTEMA BINARI Fracció decimal *16 ð Xi 8 i ð Xi 2 i 0: 000 1: 001 2: 010 3: 011 4: 100 5: 101 6: 110 27 7: 111 ð Xi 16 i Nº decimal /16 Nº decimal /8 Nº decimal /2 Fracció decimal *8 Fracció decimal *2 Fracció decimal SISTEMA DECIMAL n bits n−1 bits 1 n−1 bits 1 0 nº de bits usats pel signe nº de bits usats pel signe nº de bits usats pel mòdul nº de bits usats pel mòdul 4 bits 4 bits 4 bits 4 bits 1111 4 bits 4 bits 28 4 bits 211 8 10 = A •=B •=C •=D •=E •=F 29