Complementul lui Two

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Complementul celor doi , sau complementul bazei , este cea mai comună metodă de reprezentare a numerelor semnate în informatică . Complementul expresiei doi este adesea folosit în mod necorespunzător pentru a indica operația de negare (schimbarea semnului) la computerele care utilizează această metodă. Difuzia sa enormă este dată de faptul că circuitele de adunare și scădere nu trebuie să examineze semnul unui număr reprezentat cu acest sistem pentru a determina care dintre cele două operații este necesară, permițând tehnologii mai simple și mai precise; doar un circuit, sumatorul , este utilizat atât pentru adunare, cât și pentru scădere.

Cu complementul celor doi, cel mai semnificativ bit al numărului are greutate negativă sau pozitivă; de aici rezultă că toate numerele care încep cu „1” sunt numere binare negative, în timp ce toate numerele care încep cu „0” sunt numere binare pozitive.

Un număr binar pozitiv poate fi făcut negativ prin inversarea biților săi și adăugarea 1 la valoarea rezultată. Acest lucru este justificat matematic dacă observăm cum se comportă suma unui număr binar și inversul acestuia: rezultatul este o succesiune , care în complementul lui 2 reprezintă -1. În simboluri:

În același mod, se poate obține valoarea absolută a unui număr binar negativ, adică prin luarea complementarului (inversarea valorii biților individuali) și adăugarea 1 la numărul binar rezultat.

Un număr binar de n cifre poate reprezenta numere între Și .

De exemplu, un număr binar din 8 cifre poate reprezenta numere cuprinse între -128 și +127.

Această metodă permite să aibă o singură reprezentare zero (când toți biții sunt zero, eliminând astfel redundanța zero care apare odată cu reprezentarea în modulo și semn ) și să funcționeze eficient adunarea și scăderea având întotdeauna primul bit la indică semnul .

De fapt, dacă bitul cel mai semnificativ (primul) este egal cu 1, numărul complementului celor doi va fi negativ, în timp ce dacă acesta este egal cu zero, numărul va fi pozitiv, iată un exemplu:

01101100 (108) 10010100 (-108)

Caracteristici

Această metodă de reprezentare are avantaje semnificative, în special pentru a face sume și diferențe. De fapt, complementul celor două depășește dezavantajele modulului și ale reprezentării semnelor, mai ales în ceea ce privește complexitatea de fabricație a circuitelor sumatorului.

După cum puteți vedea, în complementul doi, primul bit devine automat bitul de semn (ca și pentru reprezentarea modulo și semn), rezolvând totuși problema ambiguității lui 0 (în completarea cu 2, 00000 și 10000 au semnificații diferite) și operațiile de sumă și diferență sunt mult facilitate, care sunt reduse doar la operația de sumă: pentru a înțelege mai bine un exemplu este suficient:

Calculul opusului în complementul celor doi

Pentru a reprezenta opusul unui număr binar în complement, biții simpli sunt inversați sau negați: adică se aplică operația logică NU . În cele din urmă, 1 se adaugă la valoarea numărului găsit cu această operație.

Să luăm un exemplu reprezentând numărul -5 cu 8 biți în complementul lui 2.

Să începem cu reprezentarea binară a numărului 5:

 0000 0101 (5)

Prima cifră este 0, deci numărul este cu siguranță pozitiv. Să inversăm biții: 0 devine 1 și 1 devine 0:

 1111 1010 

În acest moment am obținut complementul celui al numărului 5; pentru a obține complementul celor doi, adăugăm 1 la acest număr:

 1111 1010 + 0000 0001 = 1111 1011 (-5)

Rezultatul este un număr binar semnat care reprezintă numărul negativ -5 în complementul doi. Primul bit, egal cu 1, evidențiază faptul că numărul este negativ.

Complementul celor doi ai unui număr negativ returnează numărul său pozitiv egal cu valoarea absolută: inversând biții reprezentării numărului -5 (mai sus) obținem:

 0000 0100

Adăugând 1 obținem:

 0000 0100 + 0000 0001 = 0000 0101 (+5)

Care este tocmai reprezentarea numărului +5 în formă binară.

Rețineți că complementul zero al celor doi este zero însuși: inversând reprezentarea obținem un octet de 8 biți egal cu toți 1s și adăugând 1 se întoarce la toți 0s ( depășirea este ignorată).

Plus

Adăugarea a două numere întregi reprezentate cu această metodă nu necesită procese speciale dacă acestea sunt de semn opus, iar semnul este determinat automat. Să luăm un exemplu adăugând 15 și -5:

 11111 1110 (reportare)
  0000 1111 (15)
+ 1111 1011 (-5)
-----------
  0000 1010 (10)

Acest proces se joacă pe lungimea fixă ​​de 8 biți a reprezentării: un transport de 1 este ignorat, ceea ce ar cauza o revărsare și rezultatul corect al operației (10) rămâne.

Ultimii doi biți (de la dreapta la stânga), care este cel mai semnificativ, din rândul reportat conțin informații importante despre validitatea operației: dacă rezultatul este inclus sau nu în gama numerelor reprezentabile. Apare dacă transportul a fost efectuat pe bitul de semn, dar nu a fost efectuat sau invers; mai simplu, dacă cei doi biți din stânga de pe linia de transport nu sunt ambii 0 sau 1. Pentru a verifica validitatea rezultatului, este convenabil să efectuați o operație XOR pe acești doi biți. Să vedem un exemplu de adăugare pe 4 biți a 7 și 3:

 01110 (report)
  0111 (7)
+ 0011 (3)
-------------
  1010 (-6)

În acest caz, așa cum se poate vedea din prezentul de transport doar pe cel mai semnificativ bit, există un overflow , astfel încât rezultatul nu este 10 (așa cum ar fi corect) ci -6, de fapt numărul maxim pozitiv care poate fi reprezentat în complementul lui doi pe patru biți este 7 (cu n = 4: 2 n-1 - 1 = 7).

Scădere

Deși scăderea s-ar putea face prin adăugarea complementului celor două subtrand la minuend, această procedură este puțin utilizată, deoarece aduce mai multe complicații decât simpla construire a unui circuit pentru scădere. Dar, la fel ca și în plus, avantajul complementului doi este eliminarea necesității de a examina semnele operanzilor pentru a determina care operație este necesară. De exemplu, scăderea -5 din 15 este ca și cum ai adăuga 5 la 15, dar acest lucru este ascuns de complementul celor doi:

 1111 0000 (report)
   0000 1111 (15)
 - 1111 1011 (−5)
 -----------
   0001 0100 (20)

Debordarea este identificată cu aceeași metodă utilizată pentru adăugare, examinând cei doi biți din stânga de pe linia de transport: dacă sunt diferiți, a avut loc o revărsare.

Să luăm un alt exemplu cu o scădere cu rezultat negativ: 15 - 35 = −20:

 1110 0000 (report)
   0000 1111 (15)
 - 0010 0011 (35)
 -----------
   1110 1100 (−20)

Particularități

În afară de o singură excepție, căutând complementul celor doi pentru fiecare număr reprezentat cu această metodă, obținem opusul său: 5 devine -5, 12 devine -12 etc.

Cel mai mic număr reprezentabil (adică cel negativ cu cea mai mare valoare absolută) este singura excepție: să vedem exemplul numărului -128 în reprezentarea pe 8 biți:

 1000 0000 (−128)
0111 1111 (biți inversați)
1000 0000 (adăugat 1)

Acest lucru se datorează faptului că 127 este cel mai mare număr semnat care poate fi reprezentat cu 7 biți. Rețineți că se raportează o revărsare deoarece există un report pe bitul de semn, dar nu în afara acestuia.

Deși acesta este un număr unic, reprezentarea sa este validă. Toate operațiunile pot funcționa cu el atât ca operand, cât și ca rezultat (cu excepția cazului în care a avut loc o revărsare).

Tratamentul matematic

Cele 2 n valori posibile ale celor n biți care constituie reprezentarea unui număr întreg sub formă binară formează un inel de clase de echivalență, adică numerele întregi ( modulul 2 n ). Fiecare clasă reprezintă un set {j + k · 2 n | k este un număr întreg} pentru fiecare număr întreg j, 0 ≤ j ≤ 2 n - 1. Există 2 n astfel de mulțimi, iar adunarea și multiplicarea sunt bine definite în ele.

Dacă clasele sunt folosite pentru a reprezenta numere cuprinse între 0 și 2 n - 1, iar depășirea este ignorată, avem un set de numere întregi nesemnate; dar fiecare dintre ele este echivalent cu sine însuși minus 2 n . Prin urmare, clasele pot fi înțelese ca reprezentarea numerelor cuprinse între −2 n - 1 și 2 n - 1 - 1, scăzând 2 n din mijlocul lor.

Pentru simplitate: cu 8 biți puteți reprezenta numerele întregi de la 0 la 255. Scăzând 256 din jumătatea superioară (de la 128 la 255) obțineți numerele de la -128 la -1, iar setul total include acum numerele de la - 128 la 127, cu semn.

Relația de complement a celor doi este clarificată de faptul că 256 = 255 + 1 și că 255 - x este complementul lui x.

Exemplu

-95 modulo 256 este egal cu 161, deoarece:

−95 + 256
= −95 + 255 + 1
= 255 - 95 + 1
= 160 + 1
= 161
 1111 1111 255 
- 0101 1111 - 95   
----------- -----
  1010 0000 (complementul cuiva) 160
+ 1 + 1
----------- -----
  1010 0001 (complementul doi) 161

Bibliografie

  • Patterson / Hennessey, Organizarea și proiectarea computerelor, ediția a cincea: interfața hardware / software, MK, 2013, 9780124077263

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT