Complemento de dois
Em 8 bits, −5 vira 11111011 e +5 vira 00000101. Digite um inteiro com sinal e uma largura de palavra de 2 a 64 bits e receba o padrão exato em complemento de dois; valores que não cabem são recusados, nunca dão a volta. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Valor
- -5
- Bits
- 8
- Binário
- 11111011
- Sem sinal
- 251
- Min
- -128
- Max
- 127
O complemento de dois é a representação que os processadores atuais usam para inteiros com sinal: uma cadeia de bits de largura fixa cujo bit mais alto é o sinal e cujos bits restantes completam uma codificação modular do valor. Esta calculadora de complemento de dois aceita um inteiro com sinal e uma largura de bits e devolve a palavra binária exata para essa largura. Valores não negativos viram os bits de magnitude habituais, preenchidos com zeros à esquerda. Valores negativos viram o resíduo do inteiro módulo dois elevado à largura, a construção clássica de inverter e somar um ensinada em todo curso de organização de computadores.
O que o complemento de dois significa e como os bits são produzidos
O complemento de dois é a representação que quase toda CPU usa para inteiros com sinal. Para uma palavra de largura w bits o intervalo representável é o intervalo fechado que vai de menos dois elevado a w menos um até dois elevado a w menos um, menos um. O bit mais significativo é o bit de sinal: zero significa um valor não negativo guardado como o binário sem sinal ordinário dessa magnitude, preenchido à esquerda com zeros até exatamente w caracteres.
Um um no bit de sinal significa um valor negativo. Codificar um inteiro negativo n é o mesmo que tomar o resíduo matemático de n módulo dois elevado a w: inverter cada bit da magnitude positiva e somar um, e conservar exatamente w bits. Essa visão modular explica por que subtrair um de zero produz uma cadeia de uns, que se decodifica como menos um, e por que o valor mais negativo em w bits é um um seguido de w menos um zeros.
Esta calculadora aplica essa identidade com aritmética modular BigInt para que cada bit seja exato em larguras de dois a sessenta e quatro. Ela não envolve valores que estouram como faria um registrador de hardware: se o inteiro com sinal não pode viver na largura escolhida, o pedido falha em vez de produzir em silêncio uma palavra que pertence a outro inteiro.
Assim, o alunado pode conferir tarefas contra uma definição que coincide com manuais, e a automação pode confiar que um resultado de sucesso é uma codificação legal para a largura declarada. Cinco positivo em oito bits é 00000101; cinco negativo em oito bits é 11111011; zero é uma cadeia de zeros; menos um é uma cadeia de uns. Esses quatro marcos bastam para verificar qualquer largura posterior pela mesma regra modular.
Onde um codificador de complemento de dois justifica o uso
As salas de aula usam uma calculadora de complemento de dois para que o alunado converta valores com sinal das tarefas em palavras de oito e dezesseis bits sem inverter à mão um bit de sinal e esquecer o passo de somar um que distingue o complemento de dois do complemento de um.
Geradores de prova precisam de um oráculo determinístico que rejeite cento e vinte e oito em oito bits como estouro em vez de envolvê-lo para menos cento e vinte e oito, porque o envelopamento é um comportamento de hardware que o estudante deve reconhecer como distinto de uma codificação legal do inteiro original.
Revisões de firmware embarcado costumam exigir uma conferência rápida de que uma constante documentada cabe de verdade na largura de campo anunciada antes de empacotá-la em um registrador, uma palavra de protocolo ou um bitfield de uma folha de dados. Quem projeta protocolos compara a palavra devolvida com um dump de pacote quando um campo com sinal é transmitido bit mais significativo primeiro.
Mantenha os pedidos pequenos, afirme o campo binary nos testes e você obtém palavras de complemento de dois reproduzíveis para tarefas, laboratórios e workers de borda sem montar uma cadeia de montagem própria.
Casos de uso
Conferências de sala e tarefas
Converta valores com sinal da folha de exercícios em palavras de complemento de dois de oito ou dezesseis bits e confirme o resultado de inverter e somar um sem uma tabela de bits desenhada à mão.
Revisões de firmware e protocolos
Confira se uma constante com sinal documentada cabe de verdade na largura de campo anunciada antes de empacotá-la em um registrador ou em um formato de fio.
Perguntas frequentes
O que acontece se o inteiro não cabe na largura de bits?
O extremo não envolve. Em oito bits o intervalo legal é −128 a 127, de modo que 128 é um erro e não o padrão de bits de −128.
Como um valor negativo é codificado?
Como o resíduo não negativo do inteiro módulo 2^w, o que equivale a inverter os bits de magnitude e somar um. Menos cinco em oito bits é 11111011.
Quais larguras de bits são aceitas?
Qualquer largura inteira de 2 a 64. As larguras habituais de ensino e firmware são 8, 16, 32 e 64, desde que o valor permaneça no intervalo de inteiros seguros do JavaScript.
Como converto um inteiro com sinal para complemento de dois?
Se ele for positivo, escreva em binário e complete com zeros à esquerda até a largura escolhida. Se for negativo, inverta os bits do valor positivo e some um: assim −5 fica 11111011 em 8 bits.
Qual é a diferença entre complemento de um e complemento de dois?
O complemento de um apenas inverte cada bit do valor positivo; o complemento de dois inverte e depois soma um. Esse passo extra é o que transforma −5 em 11111011 em 8 bits e faz −1 virar uma fileira de uns.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/math/twos-complement \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"value":-5,"bits":8}'const res = await fetch("https://api.kit.forhosting.com/math/twos-complement", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"value": -5,
"bits": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/twos-complement",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"value": -5,
"bits": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/twos-complement", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"value":-5,"bits":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"value":-5,"bits":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/twos-complement", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"value": -5,
"bits": 8
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.twos_complement",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
min_bits | 2 |
max_bits | 64 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Se o inteiro não cabe no intervalo com sinal da largura escolhida, a tarefa falha com invalid_input em vez de envolver em silêncio. Chamadas API bem-sucedidas custam US$ 0,002; entrada inválida não é cobrada.
Contrato de entrada, intervalo legal e como o estouro é informado
O campo value é o inteiro com sinal a codificar. Frações, notação científica, cadeias vazias, Infinity e NaN são rejeitados, para que uma célula de planilha defeituosa não vire um padrão de bits errado. O campo bits é a largura da palavra como inteiro de dois a sessenta e quatro inclusive, o que cobre as larguras didáticas habituais int8, int16, int32 e int64 e continua barato de calcular. Campos ausentes, não inteiros e um bits fora de dois a sessenta e quatro falham do mesmo modo e não são cobrados. O contrato é deliberadamente fail-closed: envolver 128 em 10000000 seria uma codificação correta de menos cento e vinte e oito, não de cento e vinte e oito, e este extremo recusa-se a turvar essa distinção. Envie um objeto JSON com dois campos obrigatórios. Pode ser um número JSON ou uma cadeia de dígitos decimais com sinal mais ou menos opcional. O valor absoluto deve permanecer no intervalo de inteiros seguros do JavaScript, de modo que o value ecoado continue um número JSON exato. Aceitam-se os aliases n, integer e number para value; aceitam-se width, bit_width e nbits para bits. Em sucesso a resposta ecoa value e bits, devolve binary como uma cadeia de exatamente bits caracteres zero ou um, devolve unsigned como esse mesmo padrão interpretado como inteiro não negativo, e devolve min e max para exibir o intervalo legal ao lado da resposta. Exemplo: value igual a menos cinco e bits igual a oito produzem binary 11111011, unsigned duzentos e cinquenta e um, min menos cento e vinte e oito e max cento e vinte e sete. Se value ficar fora desse intervalo, o tratador lança invalid_input e nomeia o estouro, por exemplo ao informar que cento e vinte e oito não cabe em complemento de dois de oito bits.
Onde um codificador de complemento de dois justifica o uso
Chamadas API bem-sucedidas custam o US$ 0,002 publicado; falhas de validação não consomem saldo; nada é armazenado após a resposta.
Casos de integração
Correção automática de provas e LMS
Avalie itens de complemento de dois com um oráculo determinístico que rejeita o estouro como invalid_input em vez de envolver o inteiro em outro valor.
Perguntas técnicas
Como se converte um inteiro com sinal em binário de complemento de dois?
Envie o inteiro como value e a largura da palavra como bits (2–64). A API devolve uma cadeia binária com exatamente esses caracteres 0/1, mais a magnitude sem sinal e o intervalo com sinal legal.
Quanto custa a calculadora de complemento de dois?
A ferramenta do navegador é gratuita. Pedidos API usam saldo pré-pago KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.