Algoritmul de obținere a unui cod suplimentar al unui număr negativ

Reprezentarea numerelor întregi într-un calculator.

Integratoarele sunt cele mai simple date numerice cu care funcționează un calculator. Pentru numere întregi există două reprezentări: nesemnate (numai pentru numere întregi negative) și cu un semn. Evident, numerele negative pot fi reprezentate doar într-un formular semnat. Numerele întregi din computer sunt stocate într-un format cu puncte fixe.







Reprezentarea numerelor întregi în tipuri întregi nesemnate.


Pentru o reprezentare nesemnată, toate cifrele celulei sunt atribuite reprezentării numărului în sine. De exemplu, într-un octet (8 biți), puteți reprezenta numere nesemnate de la 0 la 255. Prin urmare, dacă se știe că valoarea numerică este non-negativă, atunci este mai profitabil să o tratați ca nesemnată.

Reprezentarea numerelor întregi în tipuri întregi semnate.


Pentru reprezentarea cu semnul, bitul cel mai înalt (stânga) este atribuit semnului numărului, biții rămași la numărul în sine. Dacă numărul este pozitiv, bitul de semn este plasat 0 dacă este negativ - 1. De exemplu, un octet poate fi reprezentat prin semnul -128-127.


Reprezentarea unui număr în forma cunoscută a unui "semn" - "valoare", în care cea mai semnificativă cifră a unei celule este atribuită unui semn, iar restul unui număr într-un sistem binar, se numește codul direct al unui număr binar. De exemplu, codul direct pentru numere binare 1001 și -1001 pentru o celulă pe 8 biți este 00001001 și, respectiv, 10001001.
Numerele pozitive dintr-un computer sunt reprezentate întotdeauna folosind codul direct. Codul direct al numărului coincide complet cu înregistrarea numărului însuși în celulă a mașinii. Codul direct al unui număr negativ diferă de codul direct al numărului pozitiv corespunzător numai de conținutul cifrei semnate. Dar numerele întregi negative nu sunt reprezentate în calculator cu ajutorul codului direct, pentru reprezentarea lor se folosește așa-numitul cod suplimentar.







Un cod de număr suplimentar.


Codul suplimentar al unui număr pozitiv este egal cu codul direct al acestui număr. Codul adițional al numărului negativ m este 2 k - | m |, unde k este numărul de biți din celulă.
Așa cum am menționat deja, atunci când reprezintă numere non-negative într-un format nesemnificat, toți biții din celulă sunt atribuiți numărului însuși. De exemplu, scrierea unui număr 243 = 11110011 într-un singur octet cu o reprezentare nesemnată ar arăta astfel:

O descărcare de semn
Se pune întrebarea: în ce scop sunt scrise numere negative sub forma unui cod suplimentar și cum se obține codul suplimentar al unui număr negativ?
Codul suplimentar este utilizat pentru a simplifica executarea operațiunilor aritmetice. Dacă calculatorul a lucrat cu coduri directe de numere pozitive și negative, atunci efectuarea operațiilor aritmetice ar trebui să fie urmată de o serie de acțiuni suplimentare. De exemplu, atunci când adăugăm, ar fi necesar să verificăm semnele ambelor operanzi și să determinăm semnul rezultatului. Dacă semnele sunt aceleași, atunci suma operanzilor este calculată și aceluiași semn îi este atribuit. Dacă semnele sunt diferite, atunci numărul mai mic este scos din numărul mai mare și rezultatul este atribuit semnului unui număr mai mare. Aceasta este, în această reprezentare a numerelor (numai sub forma directă cod) operațiune de adiție este realizată printr-un algoritm suficient de complicat. Dacă numerele negative sunt reprezentate drept cod suplimentar, atunci operația de adăugare, inclusiv semnul diferit, este redusă la o adăugare bitwise.

Pentru reprezentarea pe calculator a numerelor întregi se utilizează de obicei unul, doi sau patru octeți, adică celula de memorie va fi alcătuită din opt, șaisprezece sau treizeci și două de cifre.

Algoritmul de obținere a unui cod suplimentar al unui număr negativ.


Pentru a obține un cod suplimentar k-bit al unui număr negativ,

1. modulul unui număr negativ este reprezentat de un cod direct în cifre b b;

2. Valoarea tuturor biților este inversată: toate zerourile sunt înlocuite cu cele, iar cele cu zero (astfel, codul de întoarcere k-bit al numărului original este obținut);

3. Adăugați unul la codul returnat.

exemplu:
Avem codul suplimentar de 8 biți al numărului -52:

00110100 este numărul | -52 | = 52 din codul direct

11001011 - numărul -52 din codul invers

11001100 - numărul -52 din codul suplimentar


Puteți vedea că reprezentarea unui întreg nu este foarte convenabil să fie reprezentată într-un sistem binar, adesea folosiți o reprezentare hexazecimală:







Trimiteți-le prietenilor: