ElectroDesignForgeElectroDesignForge
ElectroDesignForge

Encontrar uma página

Ferramentas de PCB
Componentes
Projeto
Pinagens e conectores

Cabos

Documentação
Calculadoras

Conversores

Setas para navegar · Enter para abrir · Esc para fechar

FundamentosSinais e interfaces

Sistemas de numeração e operações de bits — Guia completo

Aprenda conversões, máscaras, complemento de dois, faixas de inteiros e operações com registradores usando exemplos de sistemas embarcados.

Reproduza os exemplos com o conversor de bases numéricas. Binário, decimal, hexadecimal e octal representam o mesmo inteiro com conjuntos diferentes de dígitos. O binário descreve estados lógicos e registradores; o hexadecimal resume bytes e endereços; o decimal facilita medidas; o octal agrupa bits de três em três, como em máscaras de permissões.

1. Bases e notação posicional

A base 2 usa 0–1; a base 8, 0–7; a base 10, 0–9; e a base 16, 0–9 e A–F, com A = 10 e F = 15. Para dígitos dᵢ em base b: N = Σ dᵢ × bⁱ, começando por i = 0 à direita. Zeros à esquerda não alteram o valor, mas podem indicar a largura do registrador.

DECBINHEXOCT
0000000
1000111
2001022
3001133
4010044
5010155
6011066
7011177
81000810
91001911
101010A12
111011B13
121100C14
131101D15
141110E16
151111F17

2. Conversão passo a passo

Binário para decimal: 10101010₂ = 1×128 + 0×64 + 1×32 + 0×16 + 1×8 + 0×4 + 1×2 + 0×1 = 170₁₀. Some os pesos das posições com valor um.

Decimal para binário: divida sucessivamente por 2 e anote os restos. Para 13: 13 = 2×6+1; 6 = 2×3+0; 3 = 2×1+1; 1 = 2×0+1. Lendo de baixo para cima, os restos formam 1101. Também vale 255₁₀ = 11111111₂ = FF₁₆ = 377₈.

Binário para hexadecimal: agrupe de quatro em quatro a partir da direita e complete apenas o grupo esquerdo: 1010 1011 1100 1101₂ = ABCD₁₆. Cada grupo equivale a um dígito porque 16 = 2⁴.

Hexadecimal para binário: substitua cada dígito por quatro bits: 0x2F → 0010 1111₂ → 47₁₀. Maiúsculas e minúsculas têm o mesmo valor.

Octal: agrupe em trios porque 8 = 2³: 11111111₂ → 011 111 111₂ = 377₈. No sentido inverso, 17₈ → 001 111₂ = 15₁₀. Pela notação posicional: 377₈ = 3×8² + 7×8 + 7 = 255. De decimal para octal, use divisões sucessivas por 8.

3. Aritmética e inteiros exatos

Exemplos: 0x0F + 0b1 = 16, 20 − 7 = 13, 0o7 × 0x3 = 21. Na adição binária, ocorre transporte quando uma coluna soma dois: 0111 + 0001 = 1000.

A ferramenta mantém os inteiros como BigInt, inclusive acima de 2⁵³ − 1. A divisão inteira trunca em direção a zero: −7 ÷ 3 = −2. % fornece resto com o sinal do dividendo, não módulo euclidiano sempre não negativo: −7 % 3 = −1. Para b diferente de zero, a = (a / b) × b + (a % b). Divisão e resto por zero geram erro.

4. AND, OR, XOR e NOT

AND mantém os bits ativos nas duas entradas; OR ativa os presentes em qualquer uma; XOR ativa os que diferem; NOT inverte todos os bits dentro da largura escolhida. Cada coluna é processada de forma independente.

ABA AND BA OR BA XOR BNOT A
000001
010111
100110
111100

Em oito bits: 11111111 & 00001111 = 00001111 (15); 10100000 | 00001111 = 10101111 (175); 10101010 ^ 11111111 = 01010101 (85). NOT de 00001111 sem sinal resulta em 11110000 (240). Auto não tem máscara finita: ~15 = −16, pois ~x = −x − 1.

5. Inteiros com sinal e complemento de dois

Sem sinal, o valor é Σ bᵢ2ⁱ, na faixa 0 … 2ʷ−1. No complemento de dois, o bit mais significativo tem peso −2ʷ⁻¹, com faixa −2ʷ⁻¹ … 2ʷ⁻¹−1. Se esse bit estiver ativo, subtraia 2ʷ da interpretação sem sinal.

Em oito bits: FF = 255 − 256 = −1; 80 = 128 − 256 = −128. Para codificar −5, inverta 00000101 para 11111010 e some um: 11111011 = FB. Em dezesseis bits, FFFF representa −1. O complemento de dois é uma representação binária dependente da largura, não outra base.

BitsSem sinalCom sinal
80 … 255−128 … 127
160 … 65535−32768 … 32767
320 … 4294967295−2147483648 … 2147483647
640 … 18446744073709551615−9223372036854775808 … 9223372036854775807

DEC é um valor matemático. Em largura fixa, BIN/HEX/OCT não negativos são padrões: HEX FF com sinal de 8 bits resulta em DEC −1, enquanto DEC 255 é rejeitado. Entradas negativas precisam caber na faixa matemática. Nenhuma entrada é truncada silenciosamente. As saídas não decimais são preenchidas com zeros; o primeiro dígito octal pode conter até dois bits superiores não utilizados.

Auto não impõe largura nem faixa sem sinal. Os negativos são exibidos com sinal e magnitude. A visualização mostra no máximo os 128 bits menos significativos da magnitude; conversões e cópias mantêm o inteiro completo.

6. Deslocamentos e estouro

Deslocar k bits à esquerda multiplica por 2ᵏ sem limite de largura: 0x01 << 4 = 0x10 = 16. Em largura fixa aplica-se a máscara 2ʷ−1. Em oito bits sem sinal, 0x80 << 1 tem resultado exato 256 e armazenado 0, com aviso. Com sinal, 0x40 << 1 vira −128 com aviso porque 128 excede a faixa.

O deslocamento lógico à direita insere zeros: FF >> 1 = 7F = 127 sem sinal. O aritmético propaga o sinal: FF >> 1 = FF = −1, 80 >> 1 = C0 = −64, com sinal de oito bits. Para negativos, arredonda para menos infinito: −3 >> 1 = −2, enquanto −3 / 2 = −1.

B sempre é uma quantidade decimal não negativa de 0 a 65536. Esse limite controla o trabalho por cálculo sem restringir a precisão das entradas. A quantidade não é reduzida módulo 32 ou módulo a largura. Deslocar um inteiro sem sinal de oito bits à direita em 8 posições resulta em 0. O estouro aritmético, como 255 + 1 sem sinal ou −128 / −1 com sinal de oito bits, é rejeitado com o resultado DEC exato. Auto segue a semântica BigInt com sinal e largura ilimitada.

7. Registradores STM32, máscaras e flags

No STM32F407, o registrador GPIO de entrada contém os estados dos pinos. Após configurar o clock e o periférico, um cabeçalho CMSIS permite este acesso ilustrativo:

uint32_t snapshot = GPIOA->IDR;
uint32_t pin5 = (snapshot >> 5u) & 1u;
uint32_t field = (snapshot >> 4u) & 0x0Fu;
GPIOA->BSRR = 1u << 5u;

Se snapshot for 0xB0, pin5 é 1 e os bits 7:4 formam 0xB = 11. A escrita em BSRR ativa o bit de saída 5 sem leitura-modificação-escrita de ODR por software; o modo do pino ainda determina seu comportamento externo. Consulte o manual exato sobre clocks, bits reservados e campos apagados ao escrever um. Uma captura evita leituras sucessivas potencialmente diferentes.

Estas operações se aplicam a uma variável local sem sinal:

uint32_t flags = 0u;
uint32_t mask = 1u << 3u;
flags |= mask;
flags &= ~mask;
flags ^= mask;
uint32_t active = (flags & mask) != 0u;

A máscara 0x08 seleciona o bit 3. OR o ativa, AND com o complemento o limpa, XOR o alterna e a expressão final o testa. Leitura-modificação-escrita não é automaticamente atômica para memória compartilhada ou registradores; utilize mecanismos documentados ou sincronização apropriada.

8. CAN, UART, SPI, ADC e FPGA

Com os bytes 0x12 e 0x34, um campo big endian definido pelo protocolo vale (0x12 << 8) | 0x34 = 0x1234 = 4660; little endian fornece 0x3412 = 13330. Campos CAN seguem a especificação da mensagem ou o DBC. O enquadramento UART e a ordem de bits SPI não definem sozinhos a ordem de bytes de um valor multibyte. Consulte UART e SPI.

Em um ADC sem sinal de 12 bits, 0xABC = 2748 está em 0–4095. Uma aproximação de exibição entre extremos com Vref = 3,3 V fornece 2748 × 3,3 / 4095 ≈ 2,2145 V. Não é a lei exata de quantização: o passo ideal é 3,3/4096 V e a transferência real depende do ADC. Dados com sinal podem usar complemento de dois ou binário deslocado. Verifique alinhamento e codificação e use a calculadora ADC/DAC.

Declare largura e sinal explicitamente em FPGA e microcontroladores. Em SystemVerilog, 8'hFF é um padrão sem sinal de oito bits; 8'shFF representa −1 com sinal. Literais sem tamanho e promoções podem mudar resultados. As máscaras desta calculadora não reproduzem todas as regras de C/C++ ou HDL.

9. Perguntas frequentes

Como converter binário para hexadecimal?

Agrupe os bits da direita para a esquerda de quatro em quatro e substitua cada grupo por 0–F. Por exemplo, 1111 0000 é F0. Complete o grupo esquerdo com zeros se necessário.

Qual é a diferença entre inteiros com e sem sinal?

Sem sinal, todos os bits contribuem para um valor não negativo. No complemento de dois, o bit mais significativo tem peso negativo. FF em oito bits vale 255 sem sinal ou −1 com sinal.

Como funciona o complemento de dois?

Para um negativo em w bits, some o valor a 2ʷ. Isso equivale a inverter os bits da magnitude positiva e somar um dentro da largura.

O que é uma operação XOR bit a bit?

Produz um quando os bits de entrada diferem. Uma máscara XOR alterna as posições selecionadas: AA XOR FF resulta em 55.

Como extrair bits de um registrador?

Desloque o campo para a direita e aplique AND com uma máscara da mesma largura. Para os bits 7:4: (reg >> 4) & 0x0F. Respeite os efeitos das leituras do hardware.

Por que FF às vezes significa −1?

A interpretação depende da largura: FF ativa o bit de sinal em oito bits, mas 00FF em dezesseis bits representa +255.

10. Referências técnicas