Numere binare Înțelegeți l; codare semn și virgulă - Buzut

În fiecare zi ne confruntăm cu cifre negative și zecimale. În binar, nu există semn minus sau punct zecimal. În acest caz, cum se descurcă această mașină, care funcționează doar în format binar ?

binare

Vom discuta, de asemenea, noțiunea de precizie a unui număr. Adică dimensiunea alocată pentru stocarea sa: câte cifre semnificative putem stoca.

Gestionarea negativelor

De îndată ce vorbim despre scădere, ne dăm seama că un număr poate fi negativ. Prin urmare, ne punem problema stocării numărului în binar. Evident, trebuie să traduceți semnul într-o reprezentare binară. Pentru a face acest lucru, numerele binare sunt întotdeauna mărime fixă.

Astfel, pentru un număr exprimat pe un octet, bitul cel mai semnificativ este folosit pentru a exprima semnul. 0 este + și 1 este -. Prin urmare, ne dăm seama că o variabilă codificată pe un octet poate conține de la -128 la +127 dacă permite negative. Dacă se specifică faptul că nu este semnat, valorile variază de la 0 la 255.

Pentru a găsi negativul unui număr binar, inversați pur și simplu toți biții acelui număr și adăugați unul. Adăugăm unul pentru că există doar un zero. Acest lucru evită să aibă un zero pozitiv și un zero negativ, ceea ce ar duce la cazul în care +0 ≠ -0, din acest motiv putem merge până la -128 și nu -127.

Deci 0111 0100 este un număr pozitiv (116dec). Reprezentarea binară a negativului său este 1000 1100, care reprezintă toți biții inversați, plus unu: 1000 1011 + 0000 0001. Primul bit, marcajul semnelor, este ajustat automat.

Această operație se numește complementul lui two. Dacă sunteți curioși, foaia Wikipedia vă va spune mai multe despre motivele acestui marcaj.

Acum, că știi asta și știi asta în aritmetică, A - B = A + (-B), vă puteți face viața mai ușoară de a face scăderi în binar.

Managementul virgulei

Pentru a calcula numerele după punctul zecimal în binar, la fel de des, logica este aceeași ca în zecimal. În zecimal, 0,1 este egal cu 1/10 sau 10 -1; 0,01 până la 10 -2 etc.

În mod logic, în binar, 0,1bin este 2 -1 etc. Împărțim la doi de fiecare dată. Astfel, pentru primele patru rânduri după virgulă, avem:

  • 0,5
  • 0,25
  • 0,125
  • 0,0625

Rămâne doar să ne dăm seama cum să reprezentăm virgula. Secretul constă într-adevăr în scrierea științifică.

Punct fix

Este suficient să definim poziția punctului zecimal și cunoaștem instantaneu valoarea numărului. De exemplu, pentru un număr stocat pe un octet, adică opt biți, dacă definim în mod arbitrar poziția punctului zecimal chiar înainte de al patrulea bit, atunci știm că 0110 1001 = 0110,1001.

Este extrem de simplu. Acest mod de a face lucrurile se numește punct fix, deoarece poziția punctului este cunoscută din timp. Dezavantajul acestei metode este că, pentru un număr cu câteva zecimale, pierdeți spațiu de stocare semnificativ. Dacă numărul în cauză este 0110 1000, pierdem trei biți „inutil”.

Punctul fix este încă folosit. Pe procesoarele cu cost redus - microcontrolere - având doar capacitatea de a procesa numere întregi și virgule fixe, aceasta este singura soluție. În plus, în unele situații, punctul fix poate crește viteza de execuție sau poate îmbunătăți precizia calculelor.

Punctul de plutire

Pentru a depăși această problemă a pierderii de spațiu indusă de punctul fix, folosim metoda de scriere în virgulă mobilă. Această scriere reprezintă numere după cum urmează: semn × mantisa × baza exponentului . Poziția virgulei este fixă ​​în mantisă. Apoi, îl facem să plutească variind exponentul.

Este exact ca notația științifică și inginerească. Astfel, pentru aceeași dimensiune de stocare de patru cifre, de exemplu, putem stoca 1234, precum și 1,234 sau 0,1234, este suficient să indicați folosind exponentul unde este plasată virgula.

IEE754

Există încă mai multe probleme. Pe de o parte, cum să conveniți asupra poziției virgulei în mantisă? Pe de altă parte, deoarece exponentul poate fi un întreg relativ (întreg semnat), semnul trebuie gestionat și la acest nivel.

Fără un standard, fiecare producător are ca rezultat o implementare internă. Prin urmare, portarea software-ului de la o mașină la alta este complexă datorită diferențelor dintre reprezentările interne și comportamentul numerelor cu virgulă mobilă.

Rotunjiri

Standardul definește patru tipuri de rotunjire:

  • spre infinit negativ,
  • spre infinit pozitiv,
  • spre zero,
  • la cel mai apropiat.

Primele trei runde sunt folosite pentru a reprezenta numere care depășesc limita de stocare sau de precizie a formatului de reprezentare a numărului. Astfel, dacă putem stoca până la un miliard și rezultatul unei operații depășește acest număr, atunci rezultatul anunțat va fi spre infinit pozitiv.

Cel mai apropiat este modelul natural de rotunjire, la care ne referim atunci când ne gândim la rotunjirea unui număr. Standardul specifică pentru acest mod că, dacă numărul este între două, este rotunjit la cea mai apropiată valoare cu un bit cel puțin semnificativ la zero (modul de rotunjire implicit).

Precizia

Precizia este determinată de mărimea mantisei. Nu confundați precizia și amplitudinea. Precizia este determinată de mărimea mantizei, în timp ce amplitudinea este definită de mărimea exponentului de bază.

Dacă luăm ca exemplu scrierea științifică din baza 10, pentru o scriere cu trei cifre după punctul zecimal și un întreg exponent legat de o cifră, precizia este de patru cifre, dar putem reprezenta ordine de mărime variind de la + 1.999M până la -1,999M.

Cu toate acestea, ne dăm seama că nu vom putea avea o precizie de până la unități pe miliard. Maximul care poate fi stocat este 1.999e9 și chiar și pe o valoare mai mică, de exemplu 1.123e9, precizia nu este disponibilă sub milioane: 1.123e9 = 1.123.000.000.

Reducând ordinea de mărime, desigur, avem o precizie mai fină. Deci, 1,123e2 = 112,3 și 1,123e-9 este egal cu 0,000000001123.