Calcolare il complemento a due
Converta nei due sensi a larghezza fissa: -18 su 8 bit è 11101110, e leggere 11101110 su 8 bit restituisce -18, con larghezze da 2 a 53 bit e senza traboccamenti silenziosi. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Il complemento a due è la rappresentazione a larghezza fissa normalmente usata per gli interi con segno in processori, formati di file, registri e protocolli di rete. Questo convertitore opera in entrambe le direzioni: inserisca un intero e una larghezza in bit per ottenere il modello binario esatto, oppure fornisca un modello binario e la sua larghezza per recuperare l’intero con segno. Ogni richiesta viene convalidata, senza adattare silenziosamente i valori che non rientrano nell’intervallo. Il risultato è quindi adatto allo studio, al debug, alla documentazione e ai dati di test automatici, dove un solo bit di segno può cambiare il significato di un intero campo.
Scelga la larghezza prima della conversione
Un valore in complemento a due ha significato soltanto quando se ne conosce la larghezza. Gli stessi bit finali possono rappresentare valori diversi se vengono interpretati come una parola di otto, sedici o trentadue bit, perché il bit più a sinistra della larghezza scelta indica il segno. Inizi selezionando una larghezza da 2 a 53 bit, poi scelga la direzione della conversione.
Per convertire un intero in binario, inserisca un numero intero con segno. Il convertitore verifica l’intervallo valido, compreso tra meno due elevato a bits meno uno e due elevato a bits meno uno, meno uno. Una parola di otto bit accetta quindi valori da -128 a 127.
Se l’intero è fuori intervallo, la richiesta restituisce un errore di input invece di eliminare i bit più alti o produrre un riavvolgimento ingannevole. Questo comportamento rigoroso è utile nel controllo delle definizioni dei registri, dei limiti dei serializzatori, degli esercizi e delle strutture dati. Un risultato valido contiene sempre esattamente il numero di cifre richiesto, inclusi gli zeri iniziali per valori non negativi e gli uno iniziali necessari per una rappresentazione negativa a larghezza fissa.
Comprenda codifica e decodifica
Per un intero non negativo, la codifica usa la normale notazione in base due e aggiunge zeri a sinistra fino alla larghezza scelta. Per un intero negativo, il convertitore somma il valore a due elevato alla larghezza e scrive in binario il residuo non negativo. Questa definizione modulare equivale alla procedura manuale di invertire tutti i bit del valore positivo e aggiungere uno, ma evita casi speciali ed esprime direttamente la matematica.
La decodifica applica la regola al contrario. Il convertitore legge prima la stringa di bit come quantità senza segno. Se il bit iniziale è zero, tale quantità è già la risposta con segno.
Se è uno, sottrae due elevato alla larghezza per recuperare il valore negativo. L’input binario deve contenere soltanto zeri e uno e avere esattamente il numero dichiarato di caratteri. La larghezza non viene mai dedotta, durante la decodifica non viene inserito alcun riempimento e le cifre in eccesso non vengono troncate.
Queste scelte rendono prevedibile il percorso completo: ogni intero accettato genera un unico modello esatto e la decodifica alla stessa larghezza ripristina il valore originale.
Usi rappresentazioni esatte nei flussi reali
Questa capacità è utile quando un valore decimale leggibile deve essere confrontato con un campo con segno di basso livello. Chi sviluppa firmware può verificare differenze dei sensori, registri di stato ed esempi di protocollo prima di inserirli nella documentazione. Chi sviluppa applicazioni può creare valori di riferimento per il confezionamento di byte con segno, controllare i casi limite e capire se un valore senza segno insolitamente grande rappresenta in realtà un numero negativo in complemento a due.
Gli studenti possono controllare i calcoli osservando il modello completo a larghezza fissa, invece di una forma binaria abbreviata che nasconde l’estensione del segno. Il calcolo è deterministico, locale al processo di analisi e non impiega modelli, servizi esterni, casualità o orologi. Mantenga la larghezza dichiarata coerente con il formato di memorizzazione esaminato.
Se un protocollo definisce un campo di dodici bit, decodifichi tutte le dodici cifre, compresi gli zeri o gli uno iniziali.
Casi d'uso
Controllare registri con segno
Converta limiti ed esempi decimali documentati in modelli di bit a larghezza esatta per revisioni hardware e firmware.
Creare dati di test per serializzatori
Generi risultati binari stabili per valori positivi, negativi, minimi, massimi e zero.
Decodificare acquisizioni di protocollo
Interpreti un campo binario a larghezza fissa come l’intero con segno previsto dalla specifica del protocollo.
Domande frequenti
Quale intervallo rientra in una determinata larghezza?
Una larghezza di w bit memorizza interi con segno da -2^(w-1) a 2^(w-1)-1.
Che cosa accade se un intero non rientra?
Il valore non viene mai riavvolto o troncato.
Perché l’input binario deve coincidere esattamente con la larghezza?
Il bit iniziale di quella larghezza determina il segno; dedurla o riempirla silenziosamente potrebbe quindi cambiare il risultato.
Come viene codificato un numero negativo?
Il valore viene sommato a due elevato alla larghezza e il risultato viene scritto in binario. Equivale a invertire tutti i bit del numero positivo e aggiungere uno, ed è per questo che -18 su 8 bit diventa 11101110.
Come trasformo una sequenza di bit di nuovo in numero?
Prima i bit vengono letti come numero senza segno. Se il bit più a sinistra è zero, quella è già la risposta; se è uno, si sottrae due elevato alla larghezza, quindi 11101110 su 8 bit dà -18.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev2/two-complement-convert \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"integer_to_binary","bits":8,"integer":-18,"binary":"11101110"}'const res = await fetch("https://api.kit.forhosting.com/dev2/two-complement-convert", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "integer_to_binary",
"bits": 8,
"integer": -18,
"binary": "11101110"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/two-complement-convert",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "integer_to_binary",
"bits": 8,
"integer": -18,
"binary": "11101110"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/two-complement-convert", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"integer_to_binary","bits":8,"integer":-18,"binary":"11101110"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"integer_to_binary","bits":8,"integer":-18,"binary":"11101110"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/two-complement-convert", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"mode": "integer_to_binary",
"bits": 8,
"integer": -18,
"binary": "11101110"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.two_complement_convert",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
min_bits | 2 |
max_bits | 53 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Usi rappresentazioni esatte nei flussi reali
Per automatizzare, invii tramite API la modalità, la larghezza e il relativo campo intero o binario; ogni elemento riuscito usa il prezzo base pubblicato di $0.002.
Domande tecniche
È possibile convertire in entrambe le direzioni?
Sì. Usi integer_to_binary per codificare un intero con segno e binary_to_integer per decodificare un modello a larghezza fissa.
Quanto costa una richiesta API?
Ogni elemento API riuscito usa il prezzo base pubblicato di $0.002. Gli input non validi vengono rifiutati prima del risultato.