Komplement dvojke
Komplement dvojke, dopunski kod, potpuni komplement ili drugi komplement predstavlja matematičku operaciju nad binarnim brojevima, kao i reprezentaciju označenih brojeva baziranu na tim operacijama.

Komplement dvojke nekog N-bitnog broja dobija se kao dopuna do broja 2N, odnosno vrednost komplementa dvojke za neki broj dobija se oduzimanjem tog broja od broja 2N.
Ekvivalentno ovoj metodi, komplement dvojke nekog broja može se dobiti i pomoću komplementa jedinice.  

Najpre se izračuna prvi komplement broja tako što se svaka binarna cifra polaznog broja promeni (nula u jedinicu, a jedinica u nulu), pa se zatim dobijenom binarnom broju doda jedinica.
Sabiranje sa jedinicom obavlja se po principima binarnog sabiranja.Binarni brojevi se sabiraju isto kao i decimalni, s tim što se prenos na više mesto događa kada zbir premaši 1, a ne 9, kao što je u decimalnom sistemu. Drugi komplement negativnog binarnog broja dobija se tako što se sve nule i prva jedinica s desne strane prepišu, a ostale cifre se invertuju.
U komplementu dvojke može se predstaviti bilo koji celobrojni označeni broj iz intervala -2N-1 do 2N-1-1, dok se u komplementu jedinice mogu predstaviti samo brojevi iz intervala od -(2N-1-1) do 2N-1-1.

Dve glavne prednosti predstavljanja broja u komplementu dvojke:
Osnovne aritmetičke operacije kao što su sabiranje, oduzimanje i množenje su iste kao i za neoznačene celobrojne brojeve sve dok su ulazni podaci zapisani u istom broju bita i dok se svako prekoračenje preko tog broja bitova isključuje iz rešenja.

Postoji samo jedna predstava broja 0, čime je izbegnuta konfuzija koja se stvara u komplementu jedinice prilikom definisanja nule dva puta (jednom kao pozitivnog, a drugi put kao negativnog broja.)

Komplement 
Komplement je pojam koji se često koristi kada se govori o brojevnim sistemima. Praktični smisao uviđa se prilikom prikazivanja negativnih brojeva i oduzimanja brojeva, odnosno prilikom realizacije ove operacije kroz operaciju sabiranja. Komplementi pozitivnih brojeva su isti kao i ti sam brojevi.
Najopštija, uprošćena definicija komplementa bila bi da je to dopuna datog broja do neke unapred definisane vrednosti.
U binarnom brojnom sistemu definisana su samo dva komplementa i oba su od praktičnog značaja. Komplement jedinice (kao komplement najveće cifre) i komplement dvojke (kao komplement osnove sistema).

Konvertovanje iz komplementa dvojke 

Sistem komplementa dvojke kodira pozitivne i negativne brojeve u binarnoj prezentaciji. Težina svakog bita je stepen broja dva, osim za najvažniji bit (MSB), čija težina je negativ od odgovarajućeg stepena broja dva.

Vrednost w N-bitnog integera  data je pomoću sledeće formule:
 

Najvažniji bit određuje znak broja i ponekad se naziva znak bit. Za razliku od sign-and-magnitude prezentacije, sign bit takođe ima težinu −(2N − 1) pokazanu iznad. Korišćenjem N bitova, svi celi brojevi od −(2N − 1) to 2N − 1 − 1 mogu biti prezentovani.

Konverzija iz komplementa dvojke 
U notaciji komplementa dvojke, ne-negativni broj je prikazan u svojoj uobičajenoj prezentaciji; u ovom slučaju. najvažniji bit je 0. Opseg prikazanih brojeva nije isti kao kod neoznačenih (unsigned) binarnih brojeva. Na primer, 8-bitni neoznačeni broj može predstavljati vrednosti između 0 i 255 (11111111). 8-bitni broj komplementa dvojke može da predstavlja cele pozitivne brojeve od 0 do 127 (01111111), jer ostatak kombinacija bitova sa najvažnijim bitom setovanim na '1' predstavlja cele negativne brojeve od -1 do -128. Operacija komplementa dvojke je aditivno inverzna operacija, pa su negativni brojevi predstavljeni drugim komplementom apsolutne vrednosti.

Konverzija iz komplementa jedinice 
Da bi se dobio komplement dvojke binarnog broja, bitovi se invertuju korišćenjem binarne NOT operacije; rezultujućoj vrednosti se dodaje 
1, ignorišući overflow prestup koji se pojavljuje kada se uzima komplement dvojke broja 0.
Na primer, koristeći 1 bajt (= 2 nibla = 8 bitova), decimalni broj 5 je prikazan kao 
 0000 0101	

Najvažniji bit je 0, pa ova kombinacija predstavlja ne-negativni broj. Za konverziju u -5 u notaciji komplemeta dvojke, bitovi su
invertovani; 0 postaje 1, i 1 postaje 0;
 1111 1010

U ovom trenutku, prikazani broj predstavlja -5 u komplementu jedinice. Kako bi se dobio komplement dvojke, 1 se dodaje rezultatu, dajući:
 1111 1011

Rezultat je označeni binarni broj koji predstavlja decimalnu vrednost -5 u formi komplementa dvojke. Najvažniji bit je 1, pa je 
prikazana vrednost negativna.

Komplement dvojke negativnog broja je njegova odgovarajuća pozitivna vrednost. Na primer, invertovanje bitova od -5 (iznad) daje:
 0000 0100

Dodavanjem jedinice daje konačnu vrednost:
 0000 0101

Komplement dvojke broja 0 je 0: Invertovanjem svi bitovi postaju 1, a zatim dodavanjem jedinice, svi bitovi ponovo postaju nule (overflow prestup se ignoriše). Komplement dvojke najnegativnijeg broja koji se može prikazati (na primer broj sa setovanim najvažnijim bitom i svim ostalim bitovima na nuli) je isti taj broj. Iz ovoga se zaključuje da postoji još jedan dodatni negativan broj.

Oduzimanje od 2N 

Zbir broja i njegovog komplementa jedinice je N-bitna reč sa svim bitovima vrednosti 1, koja je 2N-1 Dodavanje broja njegovom komplementu dvojke rezultuje setovanjem N najnižih bitova na 0 i carry bita na 1, gde carry bit ima težinu 2N. Tako, u neoznačenoj binarnoj aritmetici vrednost komplementa dvojke negativnog broja x* od pozitivnog x zadovoljava jednakost x* = 2N − x

Na primer, da bi smo pronašli 4-bitnu prezentaciju broja -5
 
x = 510 pa je x = 01012

sa N = 4:

x* = 2N − x = 24 − 510 = 100002 − 01012=10112

Proračun može biti urađen kompletno u dekadnom sistemu, konvertujući u binarni sistem na samom kraju.

x* = 2N − x = 24 − 510 = 1110 = 10112

Konvertovanje od LSB do MSB 

Prečica za ručnu konverziju binarnog broja u njegov komplement dvojke je započinjenje kod najmanje važnog bita (LSB) i kopiranje svih
nula (radeći od LSB prema MSB) sve dok se ne dođe do prve jedinice; ta jedinica se kopira, a preostali bitovi se invertuju (Ostavite MSB kao 1 ako je inicijalni broj bio u sign-and-magnitude prezentaciji). Ova prečica nam omogućuje da pretvorimo broj u njegov komplement dvojke bez prethodnog pravljenja njegovog komplementa jedinice. Na primer: komplement dvojke od "0011 1100" je "1100 0100", gde su podvučene cifre koje se ne menjaju opracijom kopiranja (dok je ostatak cifara invertovan).
U kompjuterskoj tehnologiji, ova metoda nije brža od "komplement i dodaj jedan" metode; Obe metode zahtevaju sekvencijalni rad sa desna na levo, propagirajući logičke promene. Metoda komplementiranja i dodavanja jedinice može biti ubrzana pomoću standardnog carry look-ahead adder kola; LSB prema MSB metoda može biti ubrzana sličnom logičkom transformacijom.

Ekstenzija znaka 

Ponavljanje sign bita u 7 i 8 bitnim integerima korišćenjem komplementa dvojke

Pretvaranjem komplementa dvojke nekog broja sa određenim brojem bitova u neki sa više bitova (na primer kopiranje sa 1 bajtne promenljive u dvobajtnu promenljivu), najvažniji bit mora biti ponovljen u svim dodatnim i nižim bitovima. Neki procesori imaju instrukciju da ovo obave u jednoj instrukciji. Na drugim procesorima mora biti postavljen uslov sa kodom za setovanje relevantnih bitova ili bajtova. Slično, kada je komplement dvojke nekog broja šiftovan na desno, najvažniji bit, koji sadrži informaciju o vrednosti i znaku mora biti očuvan. Kada se šiftuje u levo, 0 ulazi unutra sa desne strane. Ova pravila čuvaju opštu semantiku da leva šiftovanja množe broj sa sva i da desna šiftovanja broj dele sa dva. I šiftovanje i dupliranje preciznosti su važni za neke multiplikacijske algoritme. Može se primetiti da su za razliku od sabiranja i oduzimanja, proširnje preciznosti i desno šiftovanje urađeni na jedan način za označene, a na drugi način za neoznačene brojeve.

Najnegativniji broj 
Sa samo jednim izuzetkom, počev od bilo kog broja u komplementu dvojke, ukoliko se svi bitovi invertuju i doda 1, dobija se 
komplement dvojke negativa tog broja. Pozitivna 12 postaje negativna 12, pozitivna 5 postaje negativna 5, nula 
postaje nula (+overflow), itd.

−128 	1000 0000
invertovani bitovi 0111 1111
dodavanje jedinice 1000 0000
Komplement dvojke broja -128 daje isti 8 bitni binarni broj.
Komplement dvojke minimalnog broja u opsegu neće imati željeni efekat od negacije broja. Na primer, komplement
dvojke od -128 u 8-bitnom sistemu rezultuje istim binarnim brojem. Ovo je zbog toga [to pozitivna vrednost 128 ne može biti predstavljena sa 
8-bitnim označenim binarnim brojem.

Aritmetičke operacije

Sabiranje 

Sabiranje brojeva u komplementu dvojke ne traži nikakvo posebno procesiranje ako operandi imaju suprotan znak: Znak rezultata je određen automatski. Na primer, sabiranje 15 i -5:

  11111 111   (carry)
   0000 1111  (15)
 + 1111 1011  (−5)
 ==================
   0000 1010  (10)

Ovaj process zavisi od ograničavanja na 8 bitnu preciznost; carry na (nepostojeći) deveti najvažniji bit je ignorisan, rezultujući sa 
aritmetički tačnim 1010.

Poslednja dva bita u carry redu (čitajući sa desna na levo) sadrže vitalne informacije: da li je proračun doneo aritmetički prestup, broj prevelik da bi bio prikazan u binarnom sistemu (u ovom slučaju veći od 8 bita). Stanje prestupa postoji kada su ova poslednja dva bita različita jedan od drugog. Kao što je već navedeno, znak broja je kodiran u najvažnijem bitu rezultata. Drugim rečima, ako su oba leva carry bita (oni sa leve strane na samom vrhu našeg primera) 1 ili su oba 0, rezultat je ispravan; ako si leva dva carry bita "1 0" ili "0 1", pojavio se znak overflowa. XOR operacija nad ovim bitovima može brzo da nam odredi da li postoji uslov prestupa. Na primer, označeno 4-bitno sabiranje 7 i 3:

  0111   (carry)
   0111  (7)
 + 0011  (3)
 =============
   1010  (−6)  invalid!

U ovom slučaju, krajnje leva dva (MSB) carry bita su "01", što znači da je došlo do prestupa sabiranja komplementa dvojke. Tako je 10102=1010
izvan dozvoljenog opsega od -8 do 7.

Uopšteno, bilo koja dva N-bitna broja mogu biti sabrana bez prestupa, prethodnim proširenjem oba na N+1 bit, i onda ih sabrati kao na primeru. N+1 bit rezultat je dovoljno velik da prikaže bilo koji mogući zbir (N=5 komplement dvojke može da prikaže vrednosti od -16 do 15) pa se prestup nikada neće pojaviti. Onda je moguće, ukoliko se to želi, skratiti rezultat nazad na N bitova čuvajući vrednost ako i samo ako je odbačeni bit ekstenzija odgovarajućeg znaka ostatka rezultujućih bitova. Ovo omogućuje drugi metod detektovanja prestupa koji je ekvivalentan metodi poređenja carry bitova, samo što može biti jednostavniji za primenu u nekim situacijama, jer ne zahteva pristup detaljima sabiranja.

...................................................................................................................

Oduzimanje 

Kompjuteri obično koriste metodu komplementa da bi inplementirali oduzimanje. Korišćenje komplementa za oduzimanje je blisko vezano za
korišćenje komplemenata za prikaz negativnih brojeva, jer kombinacija dozvoljava sve znake operanada i rezultata; takođe, direktno 
oduzimanje radi i sa brojevima komplementa dvojke. Kao i sabiranje, prednost korišćenja komplementa dvojke je u eliminaciji analize znaka 
operanada kako bi se odredilo da li je neophodno sabiranje ili oduzimanje. Na primer oduzimanje -5 od 15 je u stvari sabiranje 5 i 15. Ovo je skriveno prezentacijom komplementa dvojke:

  11110 000   (borrow)
   0000 1111  (15)
 − 1111 1011  (−5)
   ===========
   0001 0100  (20)

Prestup je otkriven na isti način kao i za sabiranje, postmatranjem poslednja dva leva (najvažnija) bita od pozajmice; prestup se 
pojavio ukoliko su različiti.

Drugi primer je operacija oduzimanja gde je rezultat negativan: 15-35=-20:
  11100 000   (borrow)
   0000 1111  (15)
 − 0010 0011  (35)
   ===========
   1110 1100  (−20)

Kao i kod sabiranja, prestup kod oduzimanja može biti izbegnut (ili otkriven posle operacije) povećanjem broja bitova oba ulaza za po jedan 
bit.

..........................................................................................................................................

Množenje 

Proizvod dva N-bitna broja zahteva 2N bitova da bi sadržao sve moguće vrednosti. Ukoliko je preciznost dva operanda u komplementu dvojke 
duplirana pre množenja, direktno množenje (odbacujući višak bitova izvan te preciznosti) će dati tačan rezultat.
Na primer, uzmimo 6 x -5 = -30. Prvo, preciznost je proširena sa 4 bita na 8. Potom su brojevi pomnoženi, odbacujući bitove 
iza 8 (prikazanih kao 'x'):

     00000110  (6)
 *   11111011  (−5)
 ============
          110
         1100
        00000
       110000
      1100000
     11000000
    x10000000
   xx00000000
 ============
   xx11100010

Ovo je vrlo neefikasno; Duplirajući preciznost unapred, sva sabiranja moraju biti duple preciznosti i najmanje duplo više delimičnih 
proizvoda je potrebno nego za efikasnije algoritme implementirane u kompjuterima. Neki multiplikacioni algoritmi su projektovani 
za komplement dvojke, recimo Booth ov multiplikacioni algoritam. Metode za množenje sign-magnitude brojeva ne funkcionišu sa 
brojevima u komplementu dvojke bez adaptacije. Obično nema problema kada je multiplikant (broj koji se više puta sabira kako bi se dobio 
proizvod) negativan; Potrebno je tačno postaviti početne bitove proizvoda kada je množilac negativan. Najčešće dve metode za
prilagođenje algoritama kako bi prihvatili brojeve u komplementu dvojke su:

    Prvo proverite da da li je množilac negativan. Ako jeste, negirajte oba operanda pre množenja)
Množilac postaje pozitivan pa će algoritam raditi. Pošto su oba operanda negirana, rezultat će još uvek imati tačan znak

    Oduzimanje delimičnog proizvoda nastalog od MSB (pseudo znak bit) umesto sabiranja kao drugi delimični proizvodi. Ova metoda zahteva multiplikantovo proširenje znak bita za jednu poziciju, kako bi bio sačuvan za desne šift akcije. 

Kao primer druge metode, uzmimo opšti add-and-shift algoritam za množenje. Umesto šiftovanja delimičnih proizvoda na levo kao što se radi sa olovkom i papirom, akumulirani proizvod je pomeren desno, u drugi regitar koji će eventualno držati manje važnu polovinu proizvoda. Pošto se najmanje važni bitovi nisu promenili jednom kada su izračunati, dodavanja mogu biti jednostruke preciznosti akumulirajući u registru ono što će eventualno držati najvažniju polovinu proizvoda. U sledećem primeru, ponovo množeći 6 sa -5, dva registra i proširen bit znaka su podeljeni sa "|": 

 0 0110  (6)  (multiplikant sa proširenim znako bitom)
 × 1011 (−5)  (množilac)
 =|====|====
 0|0110|0000  (prvi delimični proizvod (krajnji desni bit je 1))        
 0|0011|0000  (šift desno, čuvajući prošireni znak bit)               
 0|1001|0000  (sabiranje drugog delimičnog proizvoda (sledeći bit je 1))              
 0|0100|1000  (šift desno, očuvanje proširenog znak bita)              
 0|0100|1000  (sabiranje trećeg delimičnog proizvoda: 0 pa nema promene)              
 0|0010|0100  (šift desno, očuvanje proširenog znak bita)              
 1|1100|0100  (oduzimanje poslednjeg delimičnog proizvoda jer je od znak bita)              
 1|1110|0010  (šift desno, očuvanje proširenog znak bita)              
|1110|0010 (odbacivanje proširenog znak bita, davenje konačnog odgovora, -30)

Reference 

Бинарна аритметика
Računarstvo
Бинарне операције
Komplement dvojke , dopunski kod , potpuni komplement ili drugi komplement predstavlja matematičku operaciju nad binarnim brojevima , kao i reprezentaciju označenih brojeva baziranu na tim operacijama . Komplement dvojke nekog N-bitnog broja dobija se kao dopuna do broja , odnosno vrednost komplementa dvojke za neki broj dobija se oduzimanjem tog broja od broja . Ekvivalentno ovoj metodi , komplement dvojke nekog broja može se dobiti i pomoću komplementa jedinice . Najpre se izračuna prvi komplement broja tako što se svaka binarna cifra polaznog broja promeni ( nula u jedinicu , a jedinica u nulu ) , pa se zatim dobijenom binarnom broju doda jedinica . Sabiranje sa jedinicom obavlja se po principima binarnog sabiranja.Binarni brojevi se sabiraju isto kao i decimalni , s tim što se prenos na više mesto događa kada zbir premaši a ne kao što je u decimalnom sistemu . Drugi komplement negativnog binarnog broja dobija se tako što se sve nule i prva jedinica s desne strane prepišu , a ostale cifre se invertuju . U komplementu dvojke može se predstaviti bilo koji celobrojni označeni broj iz intervala-1 do-1-1 , dok se u komplementu jedinice mogu predstaviti samo brojevi iz intervala od -( 2N-1-1 ) do-1-1 . Dve glavne prednosti predstavljanja broja u komplementu dvojke : Osnovne aritmetičke operacije kao što su sabiranje , oduzimanje i množenje su iste kao i za neoznačene celobrojne brojeve sve dok su ulazni podaci zapisani u istom broju bita i dok se svako prekoračenje preko tog broja bitova isključuje iz rešenja . Postoji samo jedna predstava broja čime je izbegnuta konfuzija koja se stvara u komplementu jedinice prilikom definisanja nule dva puta ( jednom kao pozitivnog , a drugi put kao negativnog broja . ) Komplement Komplement je pojam koji se često koristi kada se govori o brojevnim sistemima . Praktični smisao uviđa se prilikom prikazivanja negativnih brojeva i oduzimanja brojeva , odnosno prilikom realizacije ove operacije kroz operaciju sabiranja . Komplementi pozitivnih brojeva su isti kao i ti sam brojevi . Najopštija , uprošćena definicija komplementa bila bi da je to dopuna datog broja do neke unapred definisane vrednosti . U binarnom brojnom sistemu definisana su samo dva komplementa i oba su od praktičnog značaja . Komplement jedinice ( kao komplement najveće cifre ) i komplement dvojke ( kao komplement osnove sistema ) . Konvertovanje iz komplementa dvojke Sistem komplementa dvojke kodira pozitivne i negativne brojeve u binarnoj prezentaciji . Težina svakog bita je stepen broja dva , osim za najvažniji bit ( MSB ) , čija težina je negativ od odgovarajućeg stepena broja dva . Vrednost w N-bitnog integera data je pomoću sledeće formule : Najvažniji bit određuje znak broja i ponekad se naziva znak bit . Za razliku od sign-and-magnitude prezentacije , sign bit takođe ima težinu −( 2N − 1 ) pokazanu iznad . Korišćenjem N bitova , svi celi brojevi od −( 2N − 1 ) to − 1 −mogu biti prezentovani . Konverzija iz komplementa dvojke U notaciji komplementa dvojke , ne-negativni broj je prikazan u svojoj uobičajenoj prezentaciji ; u ovom slučaju. najvažniji bit je Opseg prikazanih brojeva nije isti kao kod neoznačenih ( unsigned ) binarnih brojeva . Na primer,bitni neoznačeni broj može predstavljati vrednosti izmeđui( 11111111) .bitni broj komplementa dvojke može da predstavlja cele pozitivne brojeve oddo( 01111111 ) , jer ostatak kombinacija bitova sa najvažnijim bitom setovanim na '1 ' predstavlja cele negativne brojeve oddo Operacija komplementa dvojke je aditivno inverzna operacija , pa su negativni brojevi predstavljeni drugim komplementom apsolutne vrednosti . Konverzija iz komplementa jedinice Da bi se dobio komplement dvojke binarnog broja , bitovi se invertuju korišćenjem binarne NOT operacije ; rezultujućoj vrednosti se dodaje 1 , ignorišući overflow prestup koji se pojavljuje kada se uzima komplement dvojke broja Na primer , koristećibajt ( =nibla =bitova ) , decimalni brojje prikazan kao 0101 Najvažniji bit je pa ova kombinacija predstavlja ne-negativni broj . Za konverziju uu notaciji komplemeta dvojke , bitovi su invertovani ; postaje ipostaje 1010 U ovom trenutku , prikazani broj predstavljau komplementu jedinice . Kako bi se dobio komplement dvojke,se dodaje rezultatu , dajući : 1011 Rezultat je označeni binarni broj koji predstavlja decimalnu vrednostu formi komplementa dvojke . Najvažniji bit je pa je prikazana vrednost negativna . Komplement dvojke negativnog broja je njegova odgovarajuća pozitivna vrednost . Na primer , invertovanje bitova od( iznad ) daje : 0100 Dodavanjem jedinice daje konačnu vrednost : 0101 Komplement dvojke brojaje Invertovanjem svi bitovi postaju a zatim dodavanjem jedinice , svi bitovi ponovo postaju nule ( overflow prestup se ignoriše ) . Komplement dvojke najnegativnijeg broja koji se može prikazati ( na primer broj sa setovanim najvažnijim bitom i svim ostalim bitovima na nuli ) je isti taj broj . Iz ovoga se zaključuje da postoji još jedan dodatni negativan broj . Oduzimanje od Zbir broja i njegovog komplementa jedinice je N-bitna reč sa svim bitovima vrednosti koja je-1 Dodavanje broja njegovom komplementu dvojke rezultuje setovanjem N najnižih bitova nai carry bita na gde carry bit ima težinu . Tako , u neoznačenoj binarnoj aritmetici vrednost komplementa dvojke negativnog broja x * od pozitivnog x zadovoljava jednakost x * = − x Na primer , da bi smo pronašlibitnu prezentaciju broja -5 x =pa je x = sa N = x * = − x =−=−10112 Proračun može biti urađen kompletno u dekadnom sistemu , konvertujući u binarni sistem na samom kraju. x * = − x =−== Konvertovanje od LSB do MSB Prečica za ručnu konverziju binarnog broja u njegov komplement dvojke je započinjenje kod najmanje važnog bita ( LSB ) i kopiranje svih nula ( radeći od LSB prema MSB ) sve dok se ne dođe do prve jedinice ; ta jedinica se kopira , a preostali bitovi se invertuju ( Ostavite MSB kaoako je inicijalni broj bio u sign-and-magnitude prezentaciji ) . Ova prečica nam omogućuje da pretvorimo broj u njegov komplement dvojke bez prethodnog pravljenja njegovog komplementa jedinice . Na primer : komplement dvojke od " 0011 je " 1100 , gde su podvučene cifre koje se ne menjaju opracijom kopiranja ( dok je ostatak cifara invertovan ) . U kompjuterskoj tehnologiji , ova metoda nije brža od " komplement i dodaj jedan " metode ; Obe metode zahtevaju sekvencijalni rad sa desna na levo , propagirajući logičke promene . Metoda komplementiranja i dodavanja jedinice može biti ubrzana pomoću standardnog carry look-ahead adder kola ; LSB prema MSB metoda može biti ubrzana sličnom logičkom transformacijom . Ekstenzija znaka Ponavljanje sign bita uibitnim integerima korišćenjem komplementa dvojke Pretvaranjem komplementa dvojke nekog broja sa određenim brojem bitova u neki sa više bitova ( na primer kopiranje sabajtne promenljive u dvobajtnu promenljivu ) , najvažniji bit mora biti ponovljen u svim dodatnim i nižim bitovima . Neki procesori imaju instrukciju da ovo obave u jednoj instrukciji . Na drugim procesorima mora biti postavljen uslov sa kodom za setovanje relevantnih bitova ili bajtova . Slično , kada je komplement dvojke nekog broja šiftovan na desno , najvažniji bit , koji sadrži informaciju o vrednosti i znaku mora biti očuvan . Kada se šiftuje u levo,ulazi unutra sa desne strane . Ova pravila čuvaju opštu semantiku da leva šiftovanja množe broj sa sva i da desna šiftovanja broj dele sa dva . I šiftovanje i dupliranje preciznosti su važni za neke multiplikacijske algoritme . Može se primetiti da su za razliku od sabiranja i oduzimanja , proširnje preciznosti i desno šiftovanje urađeni na jedan način za označene , a na drugi način za neoznačene brojeve . Najnegativniji broj Sa samo jednim izuzetkom , počev od bilo kog broja u komplementu dvojke , ukoliko se svi bitovi invertuju i doda dobija se komplement dvojke negativa tog broja . Pozitivnapostaje negativna pozitivnapostaje negativna nula postaje nula ( +overflow ) , itd . −128 1000 invertovani bitovi1111 dodavanje jedinice0000 Komplement dvojke brojadaje istibitni binarni broj . Komplement dvojke minimalnog broja u opsegu neće imati željeni efekat od negacije broja . Na primer , komplement dvojke odubitnom sistemu rezultuje istim binarnim brojem . Ovo je zbog toga [ to pozitivna vrednostne može biti predstavljena sa 8-bitnim označenim binarnim brojem . Aritmetičke operacije Sabiranje Sabiranje brojeva u komplementu dvojke ne traži nikakvo posebno procesiranje ako operandi imaju suprotan znak : Znak rezultata je određen automatski . Na primer , sabiranjei 111 ( carry ) 1111 +1011 ( −5 ) ================== 1010 Ovaj process zavisi od ograničavanja nabitnu preciznost ; carry na ( nepostojeći ) deveti najvažniji bit je ignorisan , rezultujući sa aritmetički tačnim Poslednja dva bita u carry redu ( čitajući sa desna na levo ) sadrže vitalne informacije : da li je proračun doneo aritmetički prestup , broj prevelik da bi bio prikazan u binarnom sistemu ( u ovom slučaju veći odbita ) . Stanje prestupa postoji kada su ova poslednja dva bita različita jedan od drugog . Kao što je već navedeno , znak broja je kodiran u najvažnijem bitu rezultata . Drugim rečima , ako su oba leva carry bita ( oni sa leve strane na samom vrhu našeg primera ) ili su oba rezultat je ispravan ; ako si leva dva carry bita " 1 ili " 0 , pojavio se znak overflowa . XOR operacija nad ovim bitovima može brzo da nam odredi da li postoji uslov prestupa . Na primer , označenobitno sabiranjei ( carry ) + ============= ( −6 ) invalid ! U ovom slučaju , krajnje leva dva ( MSB ) carry bita su " 01 " , što znači da je došlo do prestupa sabiranja komplementa dvojke . Tako je1010 izvan dozvoljenog opsega oddo Uopšteno , bilo koja dva N-bitna broja mogu biti sabrana bez prestupa , prethodnim proširenjem oba na N+1 bit , i onda ih sabrati kao na primeru . N+1 bit rezultat je dovoljno velik da prikaže bilo koji mogući zbir ( N=5 komplement dvojke može da prikaže vrednosti oddopa se prestup nikada neće pojaviti . Onda je moguće , ukoliko se to želi , skratiti rezultat nazad na N bitova čuvajući vrednost ako i samo ako je odbačeni bit ekstenzija odgovarajućeg znaka ostatka rezultujućih bitova . Ovo omogućuje drugi metod detektovanja prestupa koji je ekvivalentan metodi poređenja carry bitova , samo što može biti jednostavniji za primenu u nekim situacijama , jer ne zahteva pristup detaljima sabiranja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .......... ... Oduzimanje Kompjuteri obično koriste metodu komplementa da bi inplementirali oduzimanje . Korišćenje komplementa za oduzimanje je blisko vezano za korišćenje komplemenata za prikaz negativnih brojeva , jer kombinacija dozvoljava sve znake operanada i rezultata ; takođe , direktno oduzimanje radi i sa brojevima komplementa dvojke . Kao i sabiranje , prednost korišćenja komplementa dvojke je u eliminaciji analize znaka operanada kako bi se odredilo da li je neophodno sabiranje ili oduzimanje . Na primer oduzimanjeodje u stvari sabiranjei Ovo je skriveno prezentacijom komplementa dvojke : 000 ( borrow ) 1111 −1011 ( −5 ) =========== 0100 Prestup je otkriven na isti način kao i za sabiranje , postmatranjem poslednja dva leva ( najvažnija ) bita od pozajmice ; prestup se pojavio ukoliko su različiti . Drugi primer je operacija oduzimanja gde je rezultat negativan:-20 : 000 ( borrow ) 1111 −0011 =========== 1100 ( −20 ) Kao i kod sabiranja , prestup kod oduzimanja može biti izbegnut ( ili otkriven posle operacije ) povećanjem broja bitova oba ulaza za po jedan bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ........................... ... Množenje Proizvod dva N-bitna broja zahteva bitova da bi sadržao sve moguće vrednosti . Ukoliko je preciznost dva operanda u komplementu dvojke duplirana pre množenja , direktno množenje ( odbacujući višak bitova izvan te preciznosti ) će dati tačan rezultat . Na primer , uzmimox= Prvo , preciznost je proširena sabita na Potom su brojevi pomnoženi , odbacujući bitove iza( prikazanih kao 'x ' ) : * ( −5 ) ============ x10000000 xx00000000 ============ xx11100010 Ovo je vrlo neefikasno ; Duplirajući preciznost unapred , sva sabiranja moraju biti duple preciznosti i najmanje duplo više delimičnih proizvoda je potrebno nego za efikasnije algoritme implementirane u kompjuterima . Neki multiplikacioni algoritmi su projektovani za komplement dvojke , recimo Booth ov multiplikacioni algoritam . Metode za množenje sign-magnitude brojeva ne funkcionišu sa brojevima u komplementu dvojke bez adaptacije . Obično nema problema kada je multiplikant ( broj koji se više puta sabira kako bi se dobio proizvod ) negativan ; Potrebno je tačno postaviti početne bitove proizvoda kada je množilac negativan . Najčešće dve metode za prilagođenje algoritama kako bi prihvatili brojeve u komplementu dvojke su : Prvo proverite da da li je množilac negativan . Ako jeste , negirajte oba operanda pre množenja ) Množilac postaje pozitivan pa će algoritam raditi . Pošto su oba operanda negirana , rezultat će još uvek imati tačan znak Oduzimanje delimičnog proizvoda nastalog od MSB ( pseudo znak bit ) umesto sabiranja kao drugi delimični proizvodi . Ova metoda zahteva multiplikantovo proširenje znak bita za jednu poziciju , kako bi bio sačuvan za desne šift akcije . Kao primer druge metode , uzmimo opšti add-and-shift algoritam za množenje . Umesto šiftovanja delimičnih proizvoda na levo kao što se radi sa olovkom i papirom , akumulirani proizvod je pomeren desno , u drugi regitar koji će eventualno držati manje važnu polovinu proizvoda . Pošto se najmanje važni bitovi nisu promenili jednom kada su izračunati , dodavanja mogu biti jednostruke preciznosti akumulirajući u registru ono što će eventualno držati najvažniju polovinu proizvoda . U sledećem primeru , ponovo množećisa dva registra i proširen bit znaka su podeljeni sa " | " : 0110 ( multiplikant sa proširenim znako bitom ) ×( −5 ) ( množilac ) =|====|==== 0110|0000 ( prvi delimični proizvod ( krajnji desni bit je 0011|0000 ( šift desno , čuvajući prošireni znak bit ) 1001|0000 ( sabiranje drugog delimičnog proizvoda ( sledeći bit je 0100|1000 ( šift desno , očuvanje proširenog znak bita ) 0100|1000 ( sabiranje trećeg delimičnog proizvoda:pa nema promene ) 0010|0100 ( šift desno , očuvanje proširenog znak bita ) 1100|0100 ( oduzimanje poslednjeg delimičnog proizvoda jer je od znak bita ) 1110|0010 ( šift desno , očuvanje proširenog znak bita ) |1110|0010 ( odbacivanje proširenog znak bita , davenje konačnog odgovora , Reference Бинарна аритметика Računarstvo Бинарне операције