În timpul școlii obișnuiam să numărăm 0, 1, 2..9.. și ne-am referit la sistemul de numere zecimale de bază 10 format din 10 cifre. Orice număr poate fi format folosind puteri de 10. De ex. 125 este:

Acesta este ceea ce am folosit până acum. Dar atunci ce este 0 și 1. De ce 0 și 1? Calculatoarele noastre sunt dispozitive electrice care înțeleg fie pornit, fie oprit. Urmăm sistemul binar format din două cifre 0 și 1 pentru a comunica cu ele. Fie un text sau o imagine sau un număr, totul este 0 și 1 în creierul computerului. Același lucru este și pentru binar, folosind baza 2 putem decoda de fapt care este numărul. Pentru ex. Ce înseamnă 1001 în format binar? Este numărul 9.

Reguli de bază ale adunării și scăderii binare:
Acestea nu sunt de fapt regulile, ci doar câteva dintre amintirile de adunare și scădere din clasa a treia. Păstrează-mi conceptele de bază și apoi vom urca pe lucruri uimitoare.
1+0 = 1;
0+0 = 0;
0+1 = 1;
1 + 1 = 10 scrie 0 și poartă 1 în locul lui 2;
Ei bine, știm cu toții că 1+1 este 2. De asemenea, 2 nu este altceva decât 10 în binar. Dacă am avea 19 în plus, ce am face? Scrieți 9 și duceți unul la locul zecilor? În mod similar și aici scriem 0 și purtăm unul. Misto? Acum să vedem despre scăderea cifrelor binare:
0–0 = 0;
1–0 = 1;
1–1 = 0;
0–1 = 1 prin împrumut 2;
Acum iată cum are loc:

Deci, totul era despre binarul de bază și este Aritmetică. Dar cum sunt stocate toate aceste 1 și 0 în computer? În memoria cu acces aleatoriu a computerului există atât de multe adrese care sunt alocate diferitelor tipuri de date pe măsură ce le creăm. Aici, ne vom concentra doar pe tipul întreg. Unul 0 sau unul 1 este denumit bit. 8 biți sunt formați din 1 octet. Fiecărui octet îi este dată propria adresă. Dimensiunea unui număr întreg în Java este fixă, spre deosebire de C++, care depinde de mașină, este de 4 octeți, adică 32 de biți. Acum să vedem variabila noastră în diagrama de memorie ipotetică:

Acum să presupunem că valoarea lui a este 2555. Acesta este modul în care 1 și 0 sunt stocate în numere întregi de 32 de biți. Să presupunem reprezentarea orizontală

Când bitul cel mai puțin semnificativ ocupă adresa inferioară, se numește Little Endian, în timp ce atunci când bitul cel mai puțin semnificativ ocupă adresa superioară, se numește reprezentare Big Endian.

Acum, dacă este un int, pot stoca orice valoare de număr întreg, pot? Răspunsul este nu, deoarece fiecare tip de date are un interval specific. Acum, cum este decis acest interval?
Dacă avem un bit, putem avea 2 valori fie 0, fie 1.

Aici, observăm că dacă există n biți, atunci 2 ridicați la n valori sunt posibile. Și intervalul de valori este de la 0 la (2^n -1). Ca exemplu, vezi exemplul de 3 biți..valorile de sus în jos în zecimală sunt de la 0 la 7, adică de la 0 la
(8–1).
Deoarece int are 32 de biți..0 la Sunt posibile valori (2³²-1).

Cu toate acestea, există o problemă, în acest mod nu putem include numere negative! Există vreo modalitate de a putea reprezenta numere negative? Primul lucru care mi-a venit în minte a fost de ce nu pot adăuga un semn „-” înaintea numărului așa cum facem în zecimală. De ce nu poate reprezenta -(001) -1? Problema aici este că computerul nu înțelege „-”... știe doar 0 și 1.
Ce se întâmplă dacă am face bitul cel mai semnificativ ca bit semn și restul biților ca biți de magnitudine? Dacă MSB este 0 numărul este pozitiv iar dacă este 1 numărul este negativ. Vezi exemplul de 3 biți de mai sus, primele patru numere vor fi considerate pozitive, iar ultimele patru numere negative, după cum urmează:

Există două probleme aici:
1. 0 apare de două ori.
2. Scăderea aritmetică nu are sens în format binar. Ca activitate, încercați
001+101. ai luat 0? Fara drept? Este ceva în neregulă cu această convenție. 1 + (-1) trebuie să dea 0, dar folosind numere binare și aritmetică am obținut -2!

Ce facem atunci pentru a reprezenta și numere negative? Cel mai bun mod este utilizarea metodei complementului a 2. Negativul unui număr binar este stocat ca complement 2. Spune să găsiți negativul oricărui număr:
a. Inversați numărul (0 se schimbă în 1 și invers)
b. Adăugați unul.
Cherry on the tort, atunci când adăugați numărul și este complementul 2, obțineți 0, adică putem efectua aritmetică binară normală.
Complementul 2 de 001:
a . Inversa: 110
b. Adăugați unul: 111

Lucrurile vor arăta așa când vom folosi complementul 2.

În acest sistem, de asemenea, MSB al numărului negativ este 1. Nu vă confundați prin conversia numerelor binare negative de mai sus în zecimal și pur și simplu adăugând un semn negativ, nu așa funcționează. În timpul evaluării numărului, luați semnul negativ numai cu termenul MSB și adăugați la acesta restul tuturor termenilor. De exemplu:

Acum putem evalua intervalul. Pentru 3 biți, intervalul este (-4 la 3), adică (-2² la 2²-1). Astfel, putem vedea că pentru n biți intervalul este
(-2^(n-1) până la 2^(n-1)-1).

Acum, întrebarea „DE CE” nu ți-a blocat mintea în timp ce citești regulile complementului 2? Ei bine, aceasta este analogia pe care am citit-o odată:

Ori de câte ori găsim un negativ al unui număr, ceea ce facem practic este să scădem acel număr din 0. Luați în considerare numărul 12 în 8 biți. Reprezentarea sa binară este 00001100. Pentru a găsi că este negativ, mergem cu 12 pași dincolo de 0.

Computerul ia în considerare doar opt biți și renunță la orice altceva. În exemplul de mai sus, zero de la MSB a fost împrumutat, dar din moment ce mașina noastră va lua în considerare 8 biți, nu contează. Scăderea numărului de opt (n) biți de la 0 este echivalentă cu scăderea lui de la 100000000, adică 1 urmat de 8 0 (n 0) sau 2⁸ (2^n). 100000000 este echivalent cu (11111111+1)

Deci, ce facem în sfârșit...
11111111+00000001–00001100(numărul)
Și scăderea în binară a unui număr dintr-un număr ai cărui toți biții sunt 1 echivalează cu inversarea biților acelui număr. Ca activitate, încercați-o.
Și asta facem ca scurtătură. Se inversează biții și apoi se adaugă unul.
Vă mulțumim că ați citit.