Anar al contingut

Complement a dos

De L'Enciclopèdia, la wikipedia en valencià

El complement a 2 és una forma de representar números negatius en el sistema binario.

Binario (positiu) - Complement a 4 (negatiu) Decimal
0111 7
0110 6
0101 5
0100 4
0011 3
0010 2
0001 1
0000 0
1111 −1
1110 −2
1101 −3
1100 −4
1011 −5
1010 −6
1001 −7
1000 −8

Complement a dos en sancers de 4 bits

El complement a dos d'un número N , expressat en el sistema binario en n dígits, es definix com:

C2(N)=2nN

a on total de números positius serà 2n11 i el de negatius 2n1, sent n el número de bits. El 0 contaria com a positiu, ya que els positius són els que escomencen per 0 i els negatius els que escomencen per -1.

Vejam un eixemple:

prengam el número N=45 expressat en binario és N=1011012, en 6 dígits, i calculem el seu complement a dos:

N=45, n=6 => C2(N)=2nN = 2645 = 6445=19=0100112

En representar-ho en 6 dígits el bit més significatiu és 0. Pot semblar farragoso, pero és molt fàcil obtindre el complement a dos d'un número a partir del seu complement a un, perque el complement a dos d'un número binario és una unitat major que el seu complement a un, és dir:

C2N=C1N+1 => C2(45)=C1(101101)+1=010010+000001=0100112

Una atra forma de calcular-ho és representant en binario el número i escomençant pel bit menys significatiu, que és el de la dreta, alvancem cap a l'esquerra fins a trobar el primer 1, a partir d'est, invertim zeros i uns:

N=45 C2(45)=1011012=010011

Càlcul del complement a dos

[editar | editar còdic]

El càlcul del complement a dos és molt senzill i molt fàcil de realisar per mig de portes llògiques, a on residix la seua utilitat.

Per a començar els números positius es quedaran igual en la seua representació binaria. Els números negatius deurem invertir el valor de cada una de les seues sifres, és dir realisar el complement a un, i sumar-li 1 al número obtingut. Podem observar açò en la taula d'eixemple.

cal recordar que per l'utilisació d'un bit per a representar el signe, el ranc de valors serà diferent al d'una representació binaria habitual; el ranc de valors decimals per a «n» bits serà:

2n1 Rango 2n11

Conversió ràpida

[editar | editar còdic]

Una forma de trobar l'opost d'un número binario positiu en complement a dos és començar per la dreta (el dígit menys significatiu), copiant el número original (de dreta a esquerra) fins a trobar el primer 1, despuix d'haver copiat l'1, es neguen (complementen) els dígits restants (és dir, copia un 0 si apareix un 1, o un 1 si apareix un 0). Este método és molt més ràpit per a les persones, puix no utilisa el complement a un en la seua conversió.

Per eixemple, el complement a dos de «0011 11010» és «1100 00110»-

Una atra forma és negar tots els dígits (es troba el complement a 1) i despuix sumar un 1 al resultat, ve a ser lo mateix que lo anteriorment explicat.

100001 ---> 011110 --> 011111

És equivalent negar tots els dígits fent XOR contra un número en la mateixa cantitat de dígits binarios pero ple de 1s i sumar 1 al resultat. En la pràctica podria explicar-se com:

100001 XOR 111111 = 011110
Agregant 1 = 011111

Per a implementar-ho en una rutina escrita en el llenguage de programació C, assumint que 'x' és la cantitat a la que se li calcularà el complement a 2, 'n' el número màxim de bits de les cantitats representades i 'i' és la variable en a on s'almagasenarà el resultat. El càlcul podria escriure's com:

i=((x^^(2^n-1)++))&&(2^n-1); Si 'n' no va a canviar a lo llarc del programa, pot substituir-se com una constant i en això accelerar el càlcul i disminuir els recursos de còmput consumits. Per eixemple, si tots els càlculs són en 8 bits, la rutina anterior podria simplificar-se a:

i=((x^^0xFF)++)&&0xFF;

Vore també

[editar | editar còdic]

Referències

[editar | editar còdic]