Representació de números en signe
En matemàtiques, els números negatius en qualsevol base es representen del modo habitual, precedint-los en un signe «−». No obstant, en una computadora hi ha vàries formes de representar el signe d'un número. Este artícul tracta quatre métodos d'estendre el sistema binario per a representar números en signe: signe i magnitut, complement a un, complement a dos i excés K, a on normalment K equival a bn-1 - 1.
Per a la majoria d'usos, les computadores modernes utilisen típicament la representació en complement a dos, encara que poden usar-se unes atres en algunes circumstàncies.
En les seccions següents nos referirem exclusivament al cas de números signados en binario (i contrastarem en el decimal en fins didàctics). Açò no significa que lo mostrat ací es puga dur en forma anàloga a atres bases (hexadecimal, o octal, per eixemple). El valor absolut d'un número és la distància que ho separa del zero en la recta numèrica; és el propi número despuix de prescindir del seu signe. El valor absolut s'escriu entre barres: | |. Valor absolut de 3:|3| =3. El valor absolut de -3: |-3| =3. Els números menors que zero són per supost els números negatius.
El número que té com a valor absolut 125 i és menor que zero és -125 perque el valor absolut solament pren en conte la distància, no la direcció, raó per la qual este sol pot ser positiu o zero. |+ Per a n = 8 (8 bits) en Signe i Magnitut
Un primer enfocament al problema de representar un número signado de n-bits consistix en assignar:
- un bit per a representar el signe. Eixe bit a sovint és el bit més significatiu o MSB (de les seues sigles en anglés) i, per convenció: un 0 denota un número positiu, i un 1 denota un número negatiu;
- els (n-1)-bits restants per a representar el significant que és la magnitut del número en valor absolut.
I es coneix com a Signe i Magnitut.
Este enfocament és directament comparable a la forma habitual de mostrar el signe (colocant "+" o "-" al costat de la magnitut del número). Algunes de les primeres computadores binarias (l'IBM 7090) varen utilisar esta representació, potser per la seua relació òbvia en la pràctica habitual.
El format Signe i Magnitut és ademés l'habitual per a la representació del significant en números en punt flotant.
Complement a la base menys un
[editar | editar còdic]- Artícul principal → Complement a un.
| Valors de 8 bits | Interpretat en Complement a un en decimal | Interpretat com a Sancer sense signe en decimal |
|---|---|---|
| 00000000 | 0 | 0 |
| 00000001 | 1 | 1 |
| 00000010 | 2 | 2 |
| ... | ... | ... |
| 01111110 | 126 | 126 |
| 01111111 | 127 | 127 |
| 10000000 | −127 | 128 |
| 10000001 | −126 | 129 |
| 10000010 | −125 | 130 |
| ... | ... | ... |
| 11111101 | −2 | 253 |
| 11111110 | −1 | 254 |
| 11111111 | −0 | 255 |
Un atre enfocament seria representar números negatius usant el complement a la base menys un. En el cas dels número binario, seria el complement a un i la forma del complement a un d'un número binario és un NOT bit a bit aplicat al número, és dir, l'inversió d'uns per zeros i zeros per uns. D'esta forma, en la representació per Complement a un d'un número signado de n-bits assignem:
- un bit per a representar el signe. Eixe bit a sovint és el bit més significatiu i, per convenció: un 0 denota un número positiu, i un 1 denota un número negatiu;
- els (n-1)-bits restants per a representar el significant que és la magnitut del número en valor absolut per al cas de números positius, o be, en el complement a un del valor absolut del número, en cas de ser negatiu.
Observar aixina que la representació en Complement a un d'un número negatiu es pot obtindre de la representació en Signe i Magnitut per una mera inversió d'uns per zeros i zeros per uns del significant.
Este sistema numèric de representació era comuna en computadores més antigues; el PDP-1 i la série de UNIVAC 1100/2200, entre moltes unes atres, varen utilisar l'aritmètica en complement a un.
Eixemple de complement a un
[editar | editar còdic]Siga una representació en format de Complement a un que nos permet codificar en binario en punt fix en 8 bits (un byte). De la mateixa manera que en la representació en Signe i Magnitut, açò nos otorga 1 bit per al signe i 7 bits per a la magnitut. En 8 bits, podem representar, en teoria a lo manco (vore novament Desventages, més avall), 28 = 256 números. Els quals, segons este format, van a estar repartits entre 128 números positius (bit de signe en 0) i 128 números negatius (bit de signe en 1).
Supongam ara, que tenim que representar el número -9710. Procedim a:
- Prendre nota del signe del número -9710, que sent negatiu, durà com a bit de signe un 1;
- Com el signe és negatiu, el número a continuació del bit de signe, deurà expressar-se en complement a un. En realisar la conversió: el valor absolut de -9710 és |-9710| = 9710. Que en binario és: 11000012, i el complement a un de 11000012 és C1(1100001) = 00111102;
- Colocar tot junt, el número -9710 en binario en format de Complement a un és: 100111102. A on el 1 en el bit més significatiu indica un número negatiu, i 00111102 és el significant en complement a un del valor absolut del número.
Per al cas invers, donat un número binario en Complement a un, per eixemple, 101101012, procedim a:
- Analisar el bit més significatiu, que sent un 1 indica que el número és negatiu;
- Convertir el significant a la base desijada, per eixemple, en decimal, prenent en conte que: el valor obtingut està en valor absolut, que la magnitut real estarà donada pel bit de signe obtingut abans, i que en cas de ser bit de signe negatiu (com és el cas) es deurà obtindre el complement a un: C1(0110101) = 10010102 = |7410|. Sent que el bit de signe és 1, l'número real és -7410. Si el bit de signe anara 0, el número haguera segut 01101012 = +5310 ('sense complementar a un).
Desventages de la representació en Complement a un
[editar | editar còdic]Seguint en l'eixemple de n = 8 (8 bits).
- Posseïx doble representació del zero. En representar en Complement a un, apareix novament el zero signado: 000000002 (+010) i 111111112 (-010).
Ventages de la representació en Complement a un
[editar | editar còdic]Seguint en l'eixemple de n = 8 (8 bits).
- Posseïx un ranc simètric: els números van de el +12710 = 011111112, passant per el +010 = 000000002 i el -010 = 111111112, fins al -12710 = 100000002. I en forma general, per a n-bits, el ranc (en decimal) per a Complement a un és (-(2n-1-1); 2n-1-1), o ben ± (2n-1-1).
- Permet operar aritméticament. NOTA: en operar es deu sumar el carrege obtingut al final de l'adició/resta realisades (conegut com end-around carry), en cas d'haver-ho obtingut, per a conseguir el resultat correcte. Per eixemple: 000101012 + 100111102 = 101100112 (+2110 + -9710 = -7610) posat que el end-around carry és zero; pero, 000000102 + 111111102 = 1000000002 (+210 + -110 = -010 ≠ +110), que corregim per mig de 000000102 + 111111102 = 000000002 + 12 = 000000012, que és el resultat correcte.
Els protocols d'Internet IPv4, ICMP, UDP i TCP usen tots el mateix algoritme de sumixca de verificació de 16 bits en complement a un. Encara que la majoria de la computadores carixen de l'hardware per a manejar carrege de l'últim bit (end-around carry), la complexitat adicional és acceptada ya que és igualment sensible a errors en totes les posicions de bits. En UDP, una representació de tots zeros indica que la suma de verificació opcional ha segut omesa. L'atra representació, tots uns, indica un valor 0 en la suma de verificació (les sumes de verificació són obligatòries per a IPv4, TCP i ICMP; varen ser omeses en IPv6).
Complement a dos (o a la base)
[editar | editar còdic]- Artícul principal → Complement a dos.
| Valors de 8 bits | Interpretat en Complement a dos en decimal | Interpretat com a Sancer sense signe en decimal |
|---|---|---|
| 00000000 | 0 | 0 |
| 00000001 | 1 | 1 |
| 00000010 | 2 | 2 |
| ... | ... | ... |
| 01111110 | 126 | 126 |
| 01111111 | 127 | 127 |
| 10000000 | −128 | 128 |
| 10000001 | −127 | 129 |
| 10000010 | −126 | 130 |
| ... | ... | ... |
| 11111101 | −3 | 253 |
| 11111110 | −2 | 254 |
| 11111111 | −1 | 255 |
Un atre enfocament seria representar números negatius usant el complement a la base. En el cas dels número binario, seria el complement a dos i la forma d'obtindre el complement a dos d'un número binario és per mig de l'obtenció del complement a un i sumar-li un, o be:
| Eixemple 1 | Eixemple 2 | |
| 1. Escomençant des de la dreta trobem el primer '1' | 0101001 | 0101100 |
| 2. Fem un NOT a tots els bits que queden per l'esquerra | 1010111 | 1010100 |
D'esta forma, en la representació per Complement a dos d'un número signado de n-bits assignem:
- un bit per a representar el signe. Eixe bit a sovint és el bit més significatiu i, per convenció: un 0 denota un número positiu, i un 1 denota un número negatiu;
- els (n-1)-bits restants per a representar el significant que és la magnitut del número en valor absolut per al cas de números positius, o be, en el complement a dos del valor absolut del número, en cas de ser negatiu.
Observar aixina que la representació en Complement a dos d'un número negatiu es pot obtindre de la representació en Signe i Magnitut per una mera inversió d'uns per zeros i zeros per uns del significant, i sumar-li un al valor obtingut.
Eixemple de complement a dos
[editar | editar còdic]Siga una representació en format de Complement a dos que nos permet codificar en binario en punt fix en 8 bits (un byte). De la mateixa manera que en la representació en Signe i Magnitut, i Complement a un, açò nos otorga 1 bit per al signe i 7 bits per a la magnitut. En 8 bits, podem representar, 28 = 256 números. Els quals, segons este format, van a estar repartits entre 128 números positius (bit de signe en 0) i 128 números negatius (bit de signe en 1).
Supongam ara, que tenim que representar el número -9710. Procedim a:
- Prendre nota del signe del número -9710, que sent negatiu, durà com a bit de signe un 1;
- Com el signe és negatiu, el número a continuació del bit de signe, deurà expressar-se en complement a dos. En realisar la conversió: el valor absolut de -9710 és |-9710| = 9710. Que en binario és: 11000012, i el complement a un de 11000012 és C1(1100001) = 00111102, li vàrem sumar un per a obtindre el complement a dos: 00111102 + 00000012 = 00111112;
- Colocar tot junt, el número -9710 en binario en format de Complement a dos és: 100111112. A on el 1 en el bit més significatiu indica un número negatiu, i 00111112 és el significant en complement a dos del valor absolut del número.
Per al cas invers, donat un número binario en Complement a dos, per eixemple, 101101012, procedim a:
- Analisar el bit més significatiu, que sent un 1 indica que el número és negatiu;
- Convertir el significant a la base desijada, per eixemple, en decimal, prenent en conte que: el valor obtingut està en valor absolut, que la magnitut real estarà donada pel bit de signe obtingut abans, i que en cas de ser bit de signe negatiu (com és el cas) es deurà obtindre el complement a dos: C2(0110101) = C1(0110101) + 00000012, després C1(0110101) = 10010102, i en sumar-li 1, 10010112 = |7510|. Sent que el bit de signe és 1, l'número real és -7510. Si el bit de signe anara 0, el número haguera segut 01101012 = +5310 (sense complementar a dos).
Desventages de la representació en Complement a dos
[editar | editar còdic]Seguint en l'eixemple de n = 8 (8 bits).
- Posseïx un ranc asimètric: els números van de el +12710 = 011111112, passant per el +010 = 000000002. I ací apareix la primera diferència, el 111111112, ya no és -010 com en la representació anterior, sino que és -110, i en aplegar al 100000002 nos trobem en que el complement a dos de 100000002 és 100000002, ¡el mateix número!. Per convenció, s'assigna a este número particular el valor -12810 (per a 8 bits). Després, en forma general, per a n-bits, el ranc (en decimal) per a Complement a dos és (-2n-1; 2n-1-1).
Ventages de la representació en complement a dos
[editar | editar còdic]Seguint en l'eixemple de n = 8 (8 bits).
- No posseïx doble representació del zero.
- Permet operar aritméticament.
eixemples 1.Convertir els següents número decimal en octal i hexadecimal. https://i.ibb.co/vqX14jP/Image1.png 2.Convertir els següents número binario en decimal https://i.ibb.co/RSqyR2p/Image2.png 3.Convertir els següents números hexadecimals a decimal i binario https://i.ibb.co/YZ94XWQ/Image4.png
| Valors de 8 bits | Interpretat en Excés a 127 en decimal | Interpretat com a Sancer sense signe en decimal |
|---|---|---|
| 00000000 | -127 | 0 |
| 00000001 | -126 | 1 |
| 00000010 | -125 | 2 |
| ... | ... | ... |
| 01111110 | -1 | 126 |
| 01111111 | 0 | 127 |
| 10000000 | 1 | 128 |
| 10000001 | 2 | 129 |
| 10000010 | 3 | 130 |
| ... | ... | ... |
| 11111101 | 125 | 253 |
| 11111110 | 126 | 254 |
| 11111111 | 127 | 255 |
Un últim enfocament al problema de representar un número signado és l'excés a K, a on a cada número se li suma el mateix valor, i està en excés per dit valor. Este format és habitual per a la representació de l'exponent en números en punt flotant.
K no té un valor estandardisat, pero sol prendre's com 2n-1 (que coincidix en el complement a dos en el bit més significatiu negat), o com 2n-1-1 (com en el cas de la norma IEEE-754).
Eixemple d'Excés 2n-1
[editar | editar còdic]Siga una representació en format d'Excés que nos permet codificar en binario en punt fix en 8 bits (un byte). Després, els números 8 bits seran representats en Excés a 28-1 = 12810. En 8 bits, podem representar, 28 = 256 números.
Supongam ara, que tenim que representar el número -9710 (decimal). Procedim a:
- Prendre el número -9710 i sumar-li l'excés, en este cas 12810, després -9710 + 12810 = 3110;
- Convertim a binario, en este cas. Després, 3110 = 000111112.
Per al cas invers, donat un número binario en Excés 12810, per eixemple, 101101012, procedim a:
- Convertir el número a la base desijada, per eixemple, en decimal: 101101012 = 18110;
- Pero el valor obtingut està en excés 128, després devem llevar-li dit excés, restant 128: 18110 - 12810 = 5310.
Desventages de la representació en Excés 2n-1-1
[editar | editar còdic]Seguint en l'eixemple de n = 8 (8 bits).
- Requerix d'operacions aritmètiques intermiges per a la seua obtenció, i de canviar el número de bits es deuen actualisar dites operacions intermiges per a reflectir el nou excés.
- Posseïx ranc asimètric: est va des de +12810 = 111111112 fins a -12710 = 000000002. I en forma general, per a n-bits, el ranc (en decimal) per a Excés 2n és (-2n-1+1; 2n-1-1).
Ventages de la representació en Excés 2n-1-1
[editar | editar còdic]Seguint en l'eixemple de n = 8 (8 bits).
- El menor número possible de representar consistix en tots els bits en zero i el major en uns.
- Permet operar aritméticament, pero cal tindre en conte que cada operació du associat el seu excés i açò cal restar-li-ho al resultat final, per a corregir la representació. Per eixemple, 000111102 + 101101012 = 110100112 (-9710 + 5410 = 21110 ≠ -4310). El resultat, en aparent excés 12710, 21110, en llevar-li dit excés és 21110 - 12710 = 8410. Pero, cal tindre en conte que en sumar dos números en excés 12710, devem restar, dos voltes l'excés. Després 8410 - 12710 = -4310, que és el resultat correcte.
- No hi ha empaquetación del número. Per açò nos referim a que no cal recordar que parts del número són signe i significant, sino que els n-bits, són el número.
Taula de comparació
[editar | editar còdic]La taula següent compara la representació dels sancers entre 8 i -8 (inclosos) usant 4 bits.
| Decimal | Sancer sense signe | Signe i Magnitut | Complement a un | Complement a dos | En excés a
7 |- |
+8 | 1000 | n/d | n/d | n/d | 1111 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| +7 | 0111 | 0111 | 0111 | 0111 | 1110 | ||||||
| +6 | 0110 | 0110 | 0110 | 0110 | 1101 | ||||||
| +5 | 0101 | 0101 | 0101 | 0101 | 1100 | ||||||
| +4 | 0100 | 0100 | 0100 | 0100 | 1011 | ||||||
| +3 | 0011 | 0011 | 0011 | 0011 | 1010 | ||||||
| +2 | 0010 | 0010 | 0010 | 0010 | 1001 | ||||||
| +1 | 0001 | 0001 | 0001 | 0001 | 1000 | ||||||
| +0 | 0000 | 0000 | 0000 | 0000 | 0111 | ||||||
| -0 | n/d | 1000 | 1111 | n/d | n/d | ||||||
| -1 | n/d | 1001 | 1110 | 1111 | 0110 | ||||||
| -2 | n/d | 1010 | 1101 | 1110 | 0101 | ||||||
| -3 | n/d | 1011 | 1100 | 1101 | 0100 | ||||||
| -4 | n/d | 1100 | 1011 | 1100 | 0011 | ||||||
| -5 | n/d | 1101 | 1010 | 1011 | 0010 | ||||||
| -6 | n/d | 1110 | 1001 | 1010 | 0001 | ||||||
| -7 | n/d | 1111 | 1000 | 1001 | 0000 | ||||||
| -8 | n/d | n/d | n/d | 1000 | n/d |
Vore també
[editar | editar còdic]
- Este artícul conté una traducció derivada de «Representación de números con signo» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.