Calculadora de sinal e magnitude: codificar e decodificar
Esta calculadora de representação por sinal e magnitude converte um inteiro decimal com sinal em um padrão binário de largura fixa e converte esse padrão novamente em número.
Executar grátis
Diferentemente do complemento de dois, ela reserva o bit mais significativo exclusivamente para o sinal e usa todos os demais bits para o valor absoluto. Selecione uma operação, informe o valor e a largura total em bits para receber o bit de sinal, os bits da magnitude, a magnitude numérica, o padrão completo e o valor decodificado. O resultado também identifica a representação especial de zero negativo permitida por esse sistema numérico.
Como codificar um inteiro com sinal
Selecione a codificação, digite um inteiro de base 10 no campo de valor e escolha uma largura total entre 2 e 53 bits. A calculadora primeiro separa o sinal da magnitude absoluta. Uma entrada negativa gera um bit de sinal inicial igual a 1, enquanto zero e entradas positivas geram um bit inicial igual a 0. Em seguida, ela converte a magnitude em binário e acrescenta zeros à esquerda até que esse valor ocupe exatamente um bit a menos que a largura selecionada. O bit de sinal e a magnitude preenchida formam o padrão final. Por exemplo, a magnitude 37 é 0100101 em sete bits; portanto, -37 em oito bits se torna 10100101. A posição do sinal não pode ampliar o intervalo positivo nem o negativo. Para uma largura w, a maior magnitude aceita é 2 elevado a w menos 1, e depois menos 1. Entradas fora desse intervalo simétrico são rejeitadas, em vez de truncadas, reenquadradas ou alteradas silenciosamente. Assim, o resultado pode ser usado com segurança em exercícios, documentação e vetores de teste.
Como decodificar um padrão binário
Selecione a decodificação e informe um valor binário com exatamente a mesma quantidade de dígitos da largura escolhida. Zeros à esquerda são relevantes; por isso, o padrão é recebido como texto, e não como número decimal. O primeiro dígito é interpretado apenas como sinal: 0 significa não negativo e 1 significa negativo. Os demais dígitos são lidos como uma magnitude binária sem sinal. Quando essa magnitude não é zero, o sinal é aplicado para obter o inteiro decimal decodificado. A saída preserva o padrão original e também separa sign_bit, magnitude_bits e magnitude, permitindo que você confira cada etapa. O padrão 10100101, por exemplo, possui bit de sinal 1, bits de magnitude 0100101, magnitude 37 e valor decimal -37. A calculadora exige correspondência entre a largura declarada e o tamanho real do padrão. Ela rejeita espaços, prefixos como 0b, separadores e dígitos diferentes de 0 ou 1, impedindo que uma sequência ambígua produza uma resposta aparentemente válida.
Entenda o intervalo e o zero negativo
A representação por sinal e magnitude é simples de ler porque armazena o sinal separadamente, mas essa organização tem consequências diferentes das do complemento de dois. O intervalo numérico disponível é simétrico: um padrão de oito bits representa valores comuns de -127 a 127, e não de -128 a 127. Também existem duas codificações para o zero numérico. Todos os bits iguais a zero representam o zero positivo; um bit de sinal igual a 1 seguido apenas por bits de magnitude iguais a zero representa o zero negativo. Ambos são decodificados como valor numérico 0, portanto o campo negative_zero registra explicitamente qual representação foi recebida. Essa distinção ajuda na análise de formatos computacionais históricos, conceitos de sinal em ponto flutuante, exemplos didáticos ou exercícios de hardware nos quais o padrão de bits importa. A calculadora nunca converte implicitamente entre sinal e magnitude e complemento de dois. Se o sistema de origem usar outra representação com sinal, identifique-a antes de interpretar os bits. Para comparações confiáveis, mantenha a mesma largura em todo o conjunto de cálculos, pois o preenchimento altera o padrão completo sem mudar a magnitude nem o inteiro decodificado.
Casos de uso
Conferir exercícios de lógica digital
Verifique bits de sinal, preenchimento da magnitude, intervalos representáveis e respostas decodificadas em uma largura definida.
Criar vetores de teste determinísticos
Gere padrões exatos de sinal e magnitude e valores intermediários estruturados para testes de codificadores ou decodificadores.
Analisar formatos numéricos legados
Interprete padrões armazenados preservando a diferença relevante entre zero positivo e zero negativo.
Perguntas frequentes
Quanto custa um cálculo pela API?
Cada solicitação à API custa US$ 0,002. O mesmo cálculo determinístico também está disponível gratuitamente no seu navegador.
Quais larguras de bits são aceitas?
Você pode escolher qualquer largura total entre 2 e 53 bits, incluindo o bit de sinal.
Por que o intervalo é menor que no complemento de dois?
Um bit armazena somente o sinal e os demais armazenam a magnitude; assim, um valor de oito bits tem magnitude máxima de 127.
Como o zero negativo é tratado?
Um padrão com bit de sinal 1 e magnitude formada apenas por zeros é decodificado numericamente como 0 e retorna negative_zero como verdadeiro.
Posso incluir o prefixo 0b ou espaços?
Não. Na decodificação, o valor deve conter exatamente a quantidade solicitada de dígitos binários, sem prefixos, espaços ou separadores.
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/elec/signed-magnitude \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"operation":"encode","value":"-37","bit_width":8}'const res = await fetch("https://api.kit.forhosting.com/elec/signed-magnitude", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"operation": "encode",
"value": "-37",
"bit_width": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/signed-magnitude",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"operation": "encode",
"value": "-37",
"bit_width": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/signed-magnitude", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"operation":"encode","value":"-37","bit_width":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"operation":"encode","value":"-37","bit_width":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/signed-magnitude", 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
{
"operation": "encode",
"value": "-37",
"bit_width": 8
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.signed_magnitude",
"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.
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. |