Calculator pentru programatori și calculator bit cu bit

Se scrie o singură expresie cu literali hexazecimali 0x, binari 0b și octali 0o, operatorii bit cu bit & | ^ ~, deplasările << >> >>>, rotirile și aritmetica obișnuită — rezultatul se actualizează în timp real ca zecimal, hexazecimal, octal și binar, la o dimensiune a cuvântului de 8, 16, 32 sau 64 de biți, cu sau fără semn. Mai jos există o grilă de biți pe care se poate face clic, un panou bit cu bit cu doi operanzi (AND / OR / XOR / NAND / NOR / NOT / deplasări / ROL / ROR) și setare / ștergere / comutare pentru un singur bit. Pentru conversia simplă între baze fără logică de biți, vezi Convertorul de baze; pentru statistică, Calculatorul de statistică.
Dimensiunea cuvântului   Vedere   Operatori: & | ^ ~ << >> >>> + - * / % ( ) — doar aritmetică întreagă; rezultatele se încadrează la dimensiunea cuvântului.
DEC
HEX
OCT
BIN
Biții se afișează începând cu cel mai semnificativ; celulele estompate sunt în afara dimensiunii curente a cuvântului.
indexul bitului (0 = cel mai puțin semnificativ)
A =    B =  A și B acceptă expresii complete (de ex. 1 << 12).
Tabelul rezultatelor apare după ce A și B sunt ambele analizate. Deplasările și rotirile iau numărul de poziții din B.
Se încearcă un exemplu:
Cum se comportă deplasările: << readuce rezultatul la dimensiunea cuvântului (biții care ies pe sus dispar). >>> este mereu o deplasare logică (fără semn). >> urmează selectorul Vizualizare: aritmetică în modul cu semn, logică în modul fără semn. Confidențialitate: întregul calculator rulează în acest tab — fără server, fără stocare.

Ce este un calculator pentru programatori?

Un calculator pentru programatori face aritmetica așa cum o stochează calculatoarele: în cuvinte de lățime fixă de biți. În loc de o linie numerică fără sfârșit, un cuvânt de 8 biți este un cerc de 256 de valori, iar unul de 32 de biți este un cerc de 4.294.967.296. Fiecare rezultat este încadrat înapoi în acest cerc, iar aceiași biți se pot citi ca un contor fără semn (0 … 255) sau ca o valoare cu semn în complement față de doi (-128 … 127). Cele patru rânduri de baze de mai sus sunt aceiași biți în patru forme — se editează unul și celelalte trei urmează.

De ce trăiesc programatorii în hexazecimal

O cifră hexazecimală înseamnă exact patru biți, deci un octet are întotdeauna două cifre hexazecimale, iar un cuvânt de 32 de biți întotdeauna opt. Hexazecimalul este binarul cu zerourile regrupate pentru ochiul uman:

BinarHexZecimal
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (sau -128 cu semn)

Complementul față de doi într-un paragraf

Pentru a citi un cuvânt ca având semn, se privește bitul cel mai de sus. Dacă este 0, valoarea este pur și simplu contorul fără semn. Dacă este 1, se scade dimensiunea cercului: 0xFF pe 8 biți este 255 − 256 = −1. Acesta este tot trucul — -x și 0 - x produc aceiași biți, de aceea același hardware de adunare funcționează pentru ambele. Inversarea semnului este „inversează fiecare bit, adaugă 1”: NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Operatorii de deplasare pe scurt

OperatorNumeExemplu pe 8 biți (a = 0xF0)
a << 1deplasare la stânga0xE0 — bitul de sus iese, intră zero jos
a >> 1 (fără semn)deplasare logică la dreapta0x78 — zerourile intră sus
a >> 1 (cu semn, a = −16)deplasare aritmetică la dreapta0xF8 = −8 — bitul de semn este copiat
a >>> 1întotdeauna logică0x78 indiferent de selectorul Vizualizare
rol(a, 1)rotire la stânga0xE1 — bitul de sus care a ieșit reintră jos

Greșelile frecvente de la care ajută această pagină

Deplasare aritmetică față de deplasare logică: copierea bitului de semn (aritmetică) și umplerea cu zerouri (logică) diferă ori de câte ori bitul cel mai de sus este setat — se schimbă selectorul Vizualizare și se urmărește cum 0xF0 >> 1 trece de la 0x78 la 0xF8.
Surpriza celor 53 de biți: tipul obișnuit Number din JavaScript este un număr în virgulă mobilă de 64 de biți, cu doar 53 de biți întregi siguri, deci 0xFFFFFFFFFFFFFFFF nu poate fi reprezentat exact — această pagină folosește intern aritmetică întreagă exactă pe 64 de biți, deci fiecare cifră hexazecimală afișată este de încredere.
Capcane în virgulă mobilă: 0.1 + 0.2 dă, notoriu, 0.30000000000000004 în virgulă mobilă; acest calculator lucrează doar cu întregi din construcție — împărțirea trunchiază spre zero, exact ca / din C pentru întregi.
Zerourile de la început: în C-ul vechi, o literă ca 052 însemna octal. Aici zecimalul este format din cifre simple, iar octalul cere prefixul 0o, deci nimic nu este ambiguu.

Întrebări frecvente

Care este cel mai mare număr? — pe 64 de biți fără semn: 18.446.744.073.709.551.615 (0xFFFFFFFFFFFFFFFF); cu semn: ±9.223.372.036.854.775.808.
De ce 1 << 8 a devenit 0? — dimensiunea cuvântului este de 8 biți; bitul 8 nu există, iar masca îl elimină. Se trece la 16/32/64 de biți pentru a-l păstra.
Ce face ~? — NOT pe biți: fiecare bit se inversează în interiorul dimensiunii curente a cuvântului, deci ~0 este formată numai din unu (255 / 65535 / −1 …).
Există virgulă mobilă? — nu, doar întregi; pentru numere în virgulă mobilă, trigonometrie și funcții se folosește Calculatorul științific.
Se trimite ceva de pe calculator? — nu: fără server, fără stocare, fără analiză; se închide tab-ul și totul dispare.