ElectroDesignForgeElectroDesignForge
ElectroDesignForge

Buscar una página

Kit de herramientas de PCB
Componentes
Diseño
Distribución de pines y conectores

Cables

Documentación
Calculadoras

Convertidores

Flechas para navegar · Intro para abrir · Esc para cerrar

FundamentosSeñales e interfaces

Sistemas de numeración y operaciones de bits — Guía completa

Aprende conversiones, máscaras, complemento a dos, rangos de enteros y operaciones con registros mediante ejemplos de sistemas embebidos.

Reproduce los ejemplos con el conversor de bases numéricas. Binario, decimal, hexadecimal y octal representan el mismo entero con distintos dígitos. El binario describe estados lógicos y registros, el hexadecimal resume bytes y direcciones, el decimal facilita las medidas y el octal agrupa bits de tres en tres, por ejemplo en máscaras de permisos.

1. Bases y notación posicional

La base 2 utiliza 0–1; la base 8, 0–7; la base 10, 0–9; y la base 16, 0–9 y A–F, donde A = 10 y F = 15. Para dígitos dᵢ en base b: N = Σ dᵢ × bⁱ, empezando por i = 0 a la derecha. Los ceros iniciales no cambian el valor, aunque pueden indicar el ancho de un registro.

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

2. Conversión paso a paso

Binario a decimal: 10101010₂ = 1×128 + 0×64 + 1×32 + 0×16 + 1×8 + 0×4 + 1×2 + 0×1 = 170₁₀. Suma los pesos de las posiciones con uno.

Decimal a binario: divide repetidamente entre 2 y anota los restos. Para 13: 13 = 2×6+1; 6 = 2×3+0; 3 = 2×1+1; 1 = 2×0+1. Leyéndolos de abajo arriba se obtiene 1101. Asimismo, 255₁₀ = 11111111₂ = FF₁₆ = 377₈.

Binario a hexadecimal: agrupa de cuatro en cuatro desde la derecha y completa solo el extremo izquierdo: 1010 1011 1100 1101₂ = ABCD₁₆. Cada grupo equivale a un dígito porque 16 = 2⁴.

Hexadecimal a binario: sustituye cada dígito por cuatro bits: 0x2F → 0010 1111₂ → 47₁₀. Las mayúsculas y minúsculas son equivalentes.

Octal: agrupa de tres en tres porque 8 = 2³: 11111111₂ → 011 111 111₂ = 377₈. En sentido inverso, 17₈ → 001 111₂ = 15₁₀. Por posiciones: 377₈ = 3×8² + 7×8 + 7 = 255. Para pasar de decimal a octal, divide sucesivamente entre 8.

3. Aritmética y enteros exactos

Ejemplos: 0x0F + 0b1 = 16, 20 − 7 = 13, 0o7 × 0x3 = 21. En binario, se acarrea cuando una columna suma dos: 0111 + 0001 = 1000.

La herramienta mantiene los enteros como BigInt, incluso por encima de 2⁵³ − 1. La división entera trunca hacia cero: −7 ÷ 3 = −2. % devuelve un resto con el signo del dividendo, no un módulo euclídeo siempre no negativo: −7 % 3 = −1. Para b distinto de cero, a = (a / b) × b + (a % b). Dividir o calcular el resto entre cero produce un error.

4. AND, OR, XOR y NOT

AND conserva los bits activos en ambas entradas; OR activa los presentes en cualquiera; XOR activa los que difieren; NOT invierte todos los bits dentro del ancho elegido. Cada columna se procesa de forma independiente.

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

En ocho bits: 11111111 & 00001111 = 00001111 (15); 10100000 | 00001111 = 10101111 (175); 10101010 ^ 11111111 = 01010101 (85). NOT de 00001111 sin signo da 11110000 (240). Auto no tiene máscara finita: ~15 = −16, ya que ~x = −x − 1.

5. Enteros con signo y complemento a dos

Sin signo, el valor es Σ bᵢ2ⁱ y el rango 0 … 2ʷ−1. En complemento a dos, el bit más significativo pesa −2ʷ⁻¹ y el rango es −2ʷ⁻¹ … 2ʷ⁻¹−1. Si ese bit está activo, resta 2ʷ a la interpretación sin signo.

En ocho bits: FF = 255 − 256 = −1; 80 = 128 − 256 = −128. Para codificar −5, invierte 00000101 a 11111010 y suma uno: 11111011 = FB. En dieciséis bits, FFFF es −1. El complemento a dos es una representación binaria que depende del ancho, no otra base.

BitsSin signoCon signo
80 … 255−128 … 127
160 … 65535−32768 … 32767
320 … 4294967295−2147483648 … 2147483647
640 … 18446744073709551615−9223372036854775808 … 9223372036854775807

DEC es un valor matemático. Con ancho fijo, BIN/HEX/OCT no negativos son patrones de bits: HEX FF con signo de 8 bits produce DEC −1, mientras que DEC 255 se rechaza. Las entradas negativas deben caber en el rango matemático. Nunca se trunca una entrada silenciosamente. Las salidas no decimales se rellenan con ceros; el primer dígito octal puede contener hasta dos bits superiores sin usar.

Auto no impone ancho ni rango sin signo. Los negativos se muestran mediante signo y magnitud. La vista se limita a los 128 bits menos significativos de la magnitud; las conversiones y copias mantienen el entero completo.

6. Desplazamientos y desbordamiento

Desplazar k bits a la izquierda multiplica por 2ᵏ sin límite de ancho: 0x01 << 4 = 0x10 = 16. Con ancho fijo se aplica la máscara 2ʷ−1. En ocho bits sin signo, 0x80 << 1 tiene resultado exacto 256 y almacenado 0, con aviso. Con signo, 0x40 << 1 se convierte en −128 con aviso, porque 128 no cabe.

El desplazamiento lógico a la derecha inserta ceros: FF >> 1 = 7F = 127 sin signo. El aritmético propaga el signo: FF >> 1 = FF = −1, 80 >> 1 = C0 = −64, con signo de ocho bits. Redondea hacia menos infinito: −3 >> 1 = −2, mientras que −3 / 2 = −1.

B siempre es una cantidad decimal no negativa, de 0 a 65536. Este límite controla el trabajo por cálculo; no limita la precisión de las entradas. No se reduce módulo 32 ni módulo el ancho. Desplazar a la derecha un valor sin signo de ocho bits en 8 posiciones da 0. Se rechaza el desbordamiento aritmético, como 255 + 1 sin signo o −128 / −1 con signo de ocho bits, mostrando el resultado exacto DEC. Auto sigue la semántica BigInt con signo de ancho ilimitado.

7. Registros STM32, máscaras y flags

En STM32F407, el registro GPIO de entrada contiene los estados de los pines. Tras configurar reloj y periférico, una cabecera CMSIS permite este acceso ilustrativo:

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

Si snapshot vale 0xB0, pin5 es 1 y los bits 7:4 forman 0xB = 11. La escritura BSRR activa el bit de salida 5 sin lectura-modificación-escritura de ODR por software; el modo del pin sigue determinando su comportamiento externo. Consulta el manual del dispositivo sobre reloj, bits reservados y campos que se borran escribiendo uno. Una captura evita lecturas sucesivas posiblemente distintas.

Estas operaciones se aplican a una variable local sin signo:

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

La máscara 0x08 selecciona el bit 3. OR lo activa, AND con el complemento lo borra, XOR lo invierte y la última expresión lo comprueba. La lectura-modificación-escritura no es automáticamente atómica en memoria compartida o registros: utiliza mecanismos documentados o sincronización adecuada.

8. CAN, UART, SPI, ADC y FPGA

Con los bytes 0x12 y 0x34, un campo big endian definido por el protocolo vale (0x12 << 8) | 0x34 = 0x1234 = 4660; little endian da 0x3412 = 13330. Los campos CAN dependen de la especificación del mensaje o DBC. El entramado UART y el orden de bits SPI no definen por sí solos el orden de bytes de un valor multibyte. Consulta UART y SPI.

En un ADC sin signo de 12 bits, 0xABC = 2748 está en el rango 0–4095. Una aproximación de visualización entre extremos con Vref = 3,3 V da 2748 × 3,3 / 4095 ≈ 2,2145 V. No es la ley exacta de cuantificación: el paso ideal es 3,3/4096 V y la transferencia real depende del ADC. Los datos con signo pueden usar complemento a dos o binario desplazado. Verifica alineación y codificación y utiliza la calculadora ADC/DAC.

Declara ancho y signo explícitos en FPGA y microcontroladores. En SystemVerilog, 8'hFF es un patrón sin signo de ocho bits; 8'shFF representa −1 con signo. Los literales sin tamaño y las promociones pueden cambiar resultados. Las reglas de máscara de esta calculadora no reproducen todas las reglas de C/C++ o HDL.

9. Preguntas frecuentes

¿Cómo convierto binario a hexadecimal?

Agrupa los bits desde la derecha de cuatro en cuatro y sustituye cada grupo por 0–F. Por ejemplo, 1111 0000 es F0. Completa con ceros el grupo izquierdo si hace falta.

¿Qué diferencia hay entre enteros con y sin signo?

Sin signo, todos los bits contribuyen a un valor no negativo. En complemento a dos, el bit más significativo tiene peso negativo. FF en ocho bits es 255 sin signo o −1 con signo.

¿Cómo funciona el complemento a dos?

Para un negativo en w bits, suma su valor a 2ʷ. Equivale a invertir los bits de su magnitud positiva y sumar uno dentro del ancho.

¿Qué es una operación XOR bit a bit?

Produce uno donde los bits de entrada difieren. Una máscara XOR invierte las posiciones seleccionadas: AA XOR FF da 55.

¿Cómo extraigo bits de un registro?

Desplaza el campo hacia la derecha y aplica AND con la máscara de su ancho. Para los bits 7:4: (reg >> 4) & 0x0F. Respeta los efectos de lectura del hardware.

¿Por qué FF a veces significa −1?

La interpretación depende del ancho: FF tiene activo el bit de signo en ocho bits; 00FF en dieciséis bits representa +255.

10. Referencias técnicas