Cod suplimentar (reprezentare numerică)

Cod suplimentar pentru numere zecimale

Același principiu poate fi utilizat în reprezentarea pe calculator a numerelor zecimale: pentru fiecare evacuare cifră X se înlocuiește cu 9-X, și numărul rezultat se adaugă la 1. De exemplu, atunci când se utilizează un număr de patru cifre este înlocuit cu -0081 9919 (9919 + 0081 = 0000, a cincea descărcare este aruncat).

Aplicând aceeași idee la sistemul obișnuit număr de 10-adice afară (de exemplu, pentru un procesor ipotetic folosind sistem numeric 10-adice):

Sistem de numere de 10 cifre
(înregistrare "normală")

Sistem de numere de 10 cifre,
cod suplimentar

Conversia la codul suplimentar

Conversia unui număr de la un cod direct la altul este realizată utilizând următorul algoritm.

  1. Dacă cifra cea mai mare (semnată) a numărului scrise în codul forward este 0, atunci numărul este pozitiv și nu se fac conversii;
  2. În cazul în care cel mai semnificativ (semn) bit al numărului înregistrat în codul înainte este 1, atunci numărul este negativ, numărul tuturor biți, cu excepția semnului, sunt inversate. iar rezultatul se adaugă 1.

Un exemplu. Transformați numărul negativ -5 scris în codul direct la codul suplimentar. Codul direct al unui număr negativ este -5:

Inversați toate cifrele numărului, cu excepția celei semnate, obținând astfel codul invers (prima adăugire) a numărului negativ -5:

Adăugați la rezultatul 1, obținând astfel un cod suplimentar (a doua adăugire) cu un număr negativ -5:

Pentru a converti numărul negativ -5 scris în codul suplimentar la un număr pozitiv 5 scris în codul direct, se utilizează un algoritm similar. Și anume:

Inversați toate cifrele negative -5, obținând astfel un număr pozitiv 4 în codul direct:

Adăugând la rezultatul 1 obținem un număr pozitiv 5 în codul direct:

Și vom verifica, combinând cu codul suplimentar

În sistemul de numere p-adic, schimbarea semnului unui număr se realizează prin conversia unui număr în codul său suplimentar. De exemplu, dacă se utilizează un sistem cu numere hexazecimale, numărul opus 00015 (110) este 44445 (-110).

Implementarea algoritmului de conversie în cod suplimentar (pentru numere pe 8 biți)

Avantaje și dezavantaje

avantaje

  • Instrucțiuni generale (CPU) pentru adunare, scădere și deplasarea la dreapta pentru numere întregi semnate și nesemnate (diferența este doar în steagurile aritmetice care trebuie să fie verificate pentru a controla preaplinul ca rezultat).
  • Absența numărului "minus zero".

deficiențe

  • Reprezentarea unui număr negativ nu poate fi citită de reguli obișnuite, necesită o calificare specială sau calcule pentru ao percepe
  • În unele reprezentări (de exemplu, codul zecimal binar) sau componentele componente ale acestora (de exemplu, mantisa unui număr cu virgulă mobilă), codificarea suplimentară este incomodă
  • Modulul celui mai mare număr nu este egal cu modulul celui mai mic număr. De exemplu, pentru opt biți semnat întreg, numărul maxim: 12710 = 011111112. Număr minim: -12810 = 100000002. Prin urmare, există acolo pentru orice număr de opus. Funcționarea schimbării semnului poate necesita o verificare suplimentară.

Exemplu de conversie software

Dacă citiți date dintr-un fișier sau din zona de memorie, unde este stocată într-un cod extensie binar (de exemplu, un fișier WAVE), este posibil să fie necesară conversia octeților. Dacă datele sunt stocate în 8 biți, valorile 128-255 trebuie să fie negative.

C # .NET / C stil

Extensie de semne - funcționarea pe un număr binar, care permite creșterea numărului de cifre prin păstrarea semnului și a valorii. Se efectuează prin adăugarea cifrelor din partea celei mai mari cifre semnificative. Dacă numărul este pozitiv (cea mai mare cifră este 0), atunci se adaugă zero, dacă este negativă (cifra senior este 1) - una.

Articole similare