Calcolatrice per programmatori e bit a bit

Digiti un'unica espressione usando letterali 0x esadecimali, 0b binari e 0o ottali, gli operatori bit a bit & | ^ ~, gli shift << >> >>>, le rotazioni e l'aritmetica semplice — il risultato si aggiorna in tempo reale come decimale, esadecimale, ottale e binario con una dimensione di parola di 8, 16, 32 o 64 bit, con o senza segno. Sotto trova una griglia di bit cliccabile, un pannello bit a bit a due operandi (AND / OR / XOR / NAND / NOR / NOT / shift / ROL / ROR) e set / clear / toggle di un singolo bit. Per la semplice conversione di base senza operazioni sui bit veda il Convertitore matematico; per la statistica la Calcolatrice statistica.
Dimensione della parola   Visualizzazione   Operatori: & | ^ ~ << >> >>> + - * / % ( ) — solo aritmetica intera, i risultati si riportano alla dimensione della parola.
DEC
HEX
OCT
BIN
I bit sono mostrati dal più significativo; le celle attenuate sono fuori dalla dimensione di parola corrente.
indice del bit (0 = meno significativo)
A =    B =  A e B accettano espressioni complete (es. 1 << 12).
La tabella dei risultati compare quando A e B sono entrambi analizzabili. Gli shift e le rotazioni prendono il conteggio da B.
Provi un esempio:
Come si comportano gli shift: << riporta nella dimensione di parola (i bit che escono in alto spariscono). >>> è sempre uno shift logico (senza segno). >> segue il selettore Visualizzazione: aritmetico in modalità con segno, logico in modalità senza segno. Privacy: l'intera calcolatrice gira in questa scheda — nessun server, nessuna memorizzazione.

Che cos'è una calcolatrice per programmatori?

Una calcolatrice per programmatori esegue l'aritmetica come la memorizzano i computer: in parole di lunghezza fissa fatte di bit. Invece di una retta dei numeri infinita, una parola a 8 bit è un cerchio di 256 valori, una a 32 bit un cerchio di 4294967296. Ogni risultato viene riportato dentro quel cerchio, e gli stessi bit possono essere letti come conteggio senza segno (0 … 255) o come valore con segno in complemento a due (−128 … 127). Le quattro righe di base sopra sono gli stessi bit resi in quattro modi — ne modifichi una e le altre tre la seguono.

Perché i programmatori vivono nell'esadecimale

Una cifra esadecimale corrisponde esattamente a quattro bit, quindi un byte è sempre due cifre esadecimali, una parola a 32 bit sempre otto. L'esadecimale è il binario con gli zeri raggruppati per l'occhio umano:

BinarioEsadecimaleDecimale
1111 11110xFF255
0001 01100x1622
1000 00000x80128 (o −128 con segno)

Il complemento a due in un paragrafo

Per leggere una parola come valore con segno, guardi il bit più alto. Se è 0, il valore è semplicemente il conteggio senza segno. Se è 1, sottragga la dimensione del cerchio: un 0xFF a 8 bit vale 255 − 256 = −1. Questo è tutto il trucco — -x e 0 - x producono gli stessi bit, ed è per questo che lo stesso hardware di addizione funziona per entrambi. Il cambio di segno è «inverti ogni bit, aggiungi 1»: NOT(0x01) = 0xFE, +1 = 0xFF = −1.

Gli operatori di shift in breve

OperatoreNomeEsempio a 8 bit (a = 0xF0)
a << 1shift a sinistra0xE0 — il bit alto cade fuori, entra uno zero in basso
a >> 1 (senza segno)shift logico a destra0x78 — entrano zeri dall'alto
a >> 1 (con segno, a = −16)shift aritmetico a destra0xF8 = −8 — il bit di segno viene copiato
a >>> 1sempre logico0x78 indipendentemente dal selettore di visualizzazione
rol(a, 1)rotazione a sinistra0xE1 — il bit alto caduto rientra in basso

Errori comuni che questa pagina aiuta a evitare

Shift aritmetico contro shift logico: copiare il bit di segno (aritmetico) e riempire con zeri (logico) differiscono ogni volta che il bit alto è impostato — cambi il selettore di visualizzazione e osservi 0xF0 >> 1 passare da 0x78 a 0xF8.
La sorpresa dei 53 bit: il tipo Number ordinario di JavaScript è un float a 64 bit con solo 53 bit interi sicuri, quindi 0xFFFFFFFFFFFFFFFF non si può rappresentare esattamente — questa pagina usa internamente aritmetica intera esatta a 64 bit, quindi ogni cifra esadecimale che vede è affidabile.
Trappole dei float: 0.1 + 0.2 dà notoriamente 0.30000000000000004 in virgola mobile; questa calcolatrice è solo intera per progetto — la divisione tronca verso zero, esattamente come la / del C sugli interi.
Zeri iniziali: nel vecchio C un letterale come 052 significava ottale. Qui il decimale sono semplici cifre e l'ottale richiede il prefisso 0o, quindi nulla è ambiguo.

FAQ

Qual è il numero più grande? — 64 bit senza segno: 18446744073709551615 (0xFFFFFFFFFFFFFFFF); con segno: ±9223372036854775808.
Perché 1 << 8 è diventato 0? — la dimensione della parola è 8 bit; il bit 8 non esiste e la maschera lo elimina. Passi a 16/32/64 bit per conservarlo.
Che cosa fa ~? — NOT bit a bit: ogni bit si inverte entro la dimensione di parola corrente, quindi ~0 è tutti uno (255 / 65535 / −1 …).
C'è la virgola mobile? — no, solo intera; per i float, le funzioni trigonometriche usi la Calcolatrice scientifica.
Qualcosa lascia il mio computer? — no: nessun server, nessuna memorizzazione, nessuna analisi; chiuda la scheda e tutto sparisce.