Encoders & Utilities

Convertitore di basi numeriche

Converte tra binario, ottale, decimale ed esadecimale. Supporta BigInt e operazioni bitwise con larghezze signed.

Bitwise operations

Informazioni su questo strumento

Number Base Converter traduce in modo incrociato un intero tra binario (base 2), ottale (base 8), decimale (base 10) ed esadecimale (base 16). Si digita il valore in uno qualsiasi dei quattro campi di input e gli altri tre si aggiornano in sincrono. La matematica a precisione arbitraria è integrata — si incolla un hash a 1024 bit e si ottiene comunque una risposta esatta, senza arrotondamenti in virgola mobile.

Un secondo pannello esegue operazioni bitwise sullo stesso valore: AND, OR, XOR, NOT, shift a sinistra, shift a destra, shift aritmetico a destra. Per ogni operazione si sceglie la larghezza intera (8/16/32/64 bit, signed o unsigned) in modo che le rappresentazioni in complemento a due siano mostrate correttamente — 0xFF è 255 in u8 ma -1 in i8, e lo strumento etichetta entrambi. Un'anteprima binaria in tempo reale evidenzia le posizioni dei singoli bit così da vedere esattamente cosa è cambiato.

Quando usare questo strumento

  • Leggere e scrivere flag di configurazione. Molte API usano flag bitmask; convertire 0b10110 in 22 o viceversa è una tassa quotidiana di questo stile.
  • Debug di dump esadecimali. Un byte che mostra 0xC0 in memoria? È 192 decimale, 0b11000000 binario.
  • Calcolo di valori di colore. Colori CSS hex, codici di escape ANSI e stream byte di formati immagine vivono tutti in hex.
  • Lavorare con i permessi sui file. 0o7550b111101101 — la conversione è la base del Chmod Calculator.

Su BigInt e larghezze signed

Il Number nativo di JavaScript perde precisione oltre 2^53. Usiamo BigInt per il valore stesso, così ogni intero scrivibile entra. Le larghezze signed contano per i numeri negativi: il complemento a due a 8 bit dice 0b10000000 = -128; a 16 bit lo stesso pattern è 32768. Lo strumento mostra sempre entrambe le interpretazioni così quella giusta è solo a un'occhiata di distanza.

Domande frequenti

Perché 0xFF mostra sia 255 che -1?

Perché il pattern di byte è lo stesso — il significato dipende dal trattarlo come unsigned (u8 = 255) o come complemento a due signed (i8 = -1). L'hardware non sa quale; il sistema di tipi sì. Mostriamo entrambe le interpretazioni così da poter leggere il valore come il codice se l'aspetta. Per interi più larghi (u32 vs i32) si applica la stessa logica con punti di rottura diversi.

Quanto grande può essere il numero che lo strumento gestisce?

Arbitrario — usiamo internamente BigInt di JavaScript, quindi chiavi RSA da 4096 bit si convertono tanto facilmente quanto byte da 8 bit. Il pannello bitwise-ops necessita di una larghezza (da 8 a 64 bit, signed o unsigned) affinché il complemento a due sia definito; oltre i 64 bit trattiamo tutti i valori come unsigned e non mostriamo interpretazioni negative. Per numeri di scala crittografica, decimale/hex/binario funzionano tutti, ma la tabella bitwise si ferma ragionevolmente a 64.

Qual è la convenzione di prefisso?

La maggior parte degli ecosistemi concorda: 0b per binario (Python, JS, Rust), 0o per ottale (Python, JS, Rust — la vecchia forma con zero iniziale è deprecata), 0x per hex (universale). Il nostro strumento accetta input con o senza prefissi ed emette sempre risultati nella forma con prefisso convenzionale. C/C++ usa lo zero iniziale spoglio per l'ottale (0755), che è una mina vagante — non emettiamo mai quella forma.

Perché lo shift a destra si comporta a volte diversamente?

Ci sono due shift a destra: logico (>>>) riempie i bit alti con 0 — usato per valori unsigned. Aritmetico (>>) riempie con il bit di segno — preserva il segno dei numeri negativi in complemento a due. -8 >> 1 = -4 (aritmetico) ma -8 >>> 1 = 2147483644 (logico, 32 bit). Lo strumento espone entrambi come pulsanti separati.