Calcolatrice bitwise

Esegui operazioni bit a bit su interi e visualizza i risultati in decimale, esadecimale e binario.

Inserisci valori e clicca su Calcola.

Come funziona

  1. Inserisci due numeri: immetti i valori su cui operare, in decimale, binario (prefisso 0b) o esadecimale (prefisso 0x).
  2. Scegli l'operazione: seleziona AND, OR, XOR, NOT, shift sinistro (<<) o shift destro (>>).
  3. Consulta il risultato: l'output mostra il risultato in decimale, binario ed esadecimale allo stesso tempo, con una visualizzazione bit a bit.

Perché usare la calcolatrice bit a bit?

Le operazioni bit a bit sono fondamentali nella programmazione di sistema, nella crittografia, nello sviluppo di giochi, nella grafica, nelle reti e nei sistemi embedded. Capire come AND, OR, XOR e gli shift manipolano i singoli bit è cruciale per attivare/disattivare flag, comprimere dati e implementare algoritmi efficienti. Questa calcolatrice mostra l'operazione a livello del bit per vedere esattamente come ogni bit è influenzato.

Funzionalità

Domande frequenti

A cosa serve XOR in programmazione?

XOR (^) serve a invertire bit, fare cifratura/offuscamento semplice, scambiare variabili senza variabile temporanea, verificare la parità e mescolare hash. Restituisce 1 quando i bit differiscono e 0 quando sono identici.

Qual è la differenza tra << e >>?

Lo shift sinistro (<<) sposta tutti i bit verso sinistra, equivalente a una moltiplicazione per potenze di 2. Lo shift destro (>>) sposta i bit verso destra, equivalente a una divisione per potenze di 2. Lo shift destro aritmetico preserva il bit di segno; lo shift destro logico riempie con zeri.

Come attivare o disattivare un bit specifico?

Per attivare il bit n: value |= (1 << n). Per disattivare il bit n: value &= ~(1 << n). Per invertire il bit n: value ^= (1 << n). Per verificare se il bit n è attivo: (value & (1 << n)) !== 0.

Dall'algebra booleana al silicio: come le operazioni bit a bit sono diventate universali

Le operazioni bit a bit che ogni CPU moderna implementa provengono da due articoli fondanti pubblicati a più di 80 anni di distanza. Nel 1854, George Boole pubblicò «An Investigation of the Laws of Thought», definendo l'algebra della logica a due valori, AND, OR, NOT e le loro identità. Era un lavoro filosofico, non ingegneristico. Poi nel 1937, uno studente magistrale del MIT di 21 anni chiamato Claude Shannon scrisse la sua tesi magistrale «A Symbolic Analysis of Relay and Switching Circuits», dimostrando che l'algebra booleana poteva descrivere circuiti di relè elettrici e quindi che qualsiasi calcolo logico poteva essere fisicamente implementato. Questa tesi è ampiamente citata come la più importante tesi magistrale del XX secolo ed è il fondamento di tutta l'elettronica digitale. Il complemento a due, la rappresentazione binaria per i numeri negativi che ogni CPU usa, è stato brevettato nel 1962 da Burroughs Corporation ma era stato usato nell'IBM 704 (1954) e altre macchine antiche. IEEE 754 ha standardizzato la rappresentazione in virgola mobile nel 1985, fissando il layout dei bit che ogni Number JavaScript usa ancora, 1 bit di segno, 11 esponente, 52 mantissa per binary64. Oggi, gli operatori del linguaggio C & | ^ ~ << >> mappano quasi direttamente a singole istruzioni CPU, motivo per cui il codice bit a bit può essere drammaticamente più veloce dell'equivalente aritmetico.

I sei operatori, cosa fanno a livello di bit

Dove il bit a bit guadagna davvero il suo stipendio

Errori che mordono

Perché il complemento a due, e cosa significa a livello di bit

Ogni CPU moderna rappresenta gli interi negativi usando il complemento a due. In un byte con segno a 8 bit, i valori da 0 a 127 sono codificati come binario 0000_0000 a 0111_1111. Poi −1 è codificato come 1111_1111, −2 come 1111_1110, fino a −128 come 1000_0000. La ragione: con questa codifica, l'addizione funziona allo stesso modo sia che gli input siano con segno o senza segno, la CPU non ha bisogno di istruzioni separate add-with-sign e add-without-sign. L'asimmetria è che l'intervallo negativo è uno più grande di quello positivo (in 8 bit, da −128 a +127), motivo per cui Math.abs(INT_MIN) trabocca in ogni linguaggio con interi a larghezza fissa. Le codifiche precedenti segno-grandezza (un bit per il segno, resto per la grandezza) e complemento a uno esistevano negli anni 1950-60 ma persero contro il complemento a due perché avevano due rappresentazioni dello zero e richiedevano hardware caso speciale per la negazione.

Altre domande frequenti

Perché ~5 è uguale a -6 invece di 250?

Perché in complemento a due (la codifica che ogni CPU moderna usa), invertire ogni bit di un numero positivo ti dà -n - 1. Quindi ~5 === -6 e ~0 === -1. In un contesto senza segno a 8 bit, lo stesso pattern di bit di ~5 (binario 1111_1010) rappresenterebbe 250. JavaScript tratta il risultato come signed 32 bit, quindi vedi -6. Per ottenere l'interpretazione senza segno: (~5) >>> 0 in 32 bit, che dà 4294967290, o mascherare a 8 bit con ~5 & 0xFF che dà 250.

XOR è davvero una crittografia?

XOR è il blocco di costruzione di ogni cifrario simmetrico moderno, ma solo XOR non è crittografia sicura. Un one-time pad, XOR con una chiave veramente casuale lunga quanto il messaggio, usata esattamente una volta, è teoricamente delle informazioni infrangibile (Shannon, 1949). Riutilizza la chiave, o usa una chiave più corta del messaggio, e l'analisi della frequenza lo rompe banalmente. I cifrari reali come AES usano XOR più diffusione e sostituzione per amplificare una chiave corta in un flusso di byte pseudo-casuali che sembra un one-time pad a chiunque senza la chiave. Quindi «cifrare con XOR» va bene solo per offuscamento banale, mai per segreti reali.

Quando dovrei usare BigInt invece di Number per la manipolazione dei bit?

Ogni volta che hai bisogno di più di 32 bit di precisione bit a bit. Gli operatori bit a bit JavaScript troncano gli operandi Number a interi con segno a 32 bit prima del calcolo. Se hai bisogno di maschere a 64 bit (e.g., manipolare un set di flag di funzionalità a 64 bit, lavorare con offset Linux mmap, o implementare SHA-512), usa BigInt: 0xFFFFFFFFFFFFFFFFn & 0xFFn === 255n. BigInt è più lento di Number, ~3-10× a seconda dell'operazione, quindi riservalo per i casi in cui 32 bit sono genuinamente troppo pochi.

Come conto il numero di bit 1 in un numero?

Questo è il conteggio della popolazione o peso di Hamming. La maggior parte delle CPU moderne ha una singola istruzione per esso (POPCNT su x86, VCNT su ARM). In JavaScript, nessun built-in, quindi usa il classico di manipolazione dei bit: let c = 0; while (x) { c += x & 1; x >>>= 1; }. O il trucco SWAR parallelo da Hacker's Delight: x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; return (x * 0x01010101) >>> 24;, che conta i bit in un intero a 32 bit in circa una dozzina di cicli.

I miei dati vengono inviati da qualche parte quando uso questo calcolatore?

No. Ogni operazione gira nel motore JavaScript del tuo browser, nessuna chiamata di rete avviene durante un calcolo. Apri la scheda Rete in DevTools e clicca Calcola, vedrai zero richieste in uscita. Sicuro per maschere sensibili, chiavi o lavoro proprietario di layout dei bit.

Strumenti correlati

Convertitore da binario a testo Convertitore base numerica Calcolatore Chmod Generatore di Hash Gratuito