Cómo funciona
Cada base común es una forma de representar el mismo entero con un número distinto de dígitos. Decimal (base 10) usa 0 – 9. Binario (base 2) usa solo 0 y 1, duplicando el valor posicional con cada lugar a la izquierda: 1011 binario = 1×8 + 0×4 + 1×2 + 1×1 = 11 decimal. Hexadecimal (base 16) usa 0 – 9 y luego A – F para 10 – 15, valiendo cada posición 16 veces la siguiente; 0xFF = 15×16 + 15 = 255. Octal (base 8) es el caso intermedio poco usado — estándar en miniordenadores estilo PDP, hoy se ve sobre todo en permisos de Unix (chmod 755).
¿Por qué cuatro bases? Porque cada una sirve para algo distinto del mundo real. El binario es lo que ejecuta la CPU. El hex es binario en forma más manejable — cada dígito hex corresponde exactamente a cuatro dígitos binarios (nibble), así que 0xDEADBEEF se lee mejor que 11011110101011011011111011101111. El octal agrupa tres bits por dígito (útil cuando existían los bytes de nueve bits). El decimal es como contamos los humanos. La calculadora analiza una y muestra las otras tres para verificar de un vistazo sin malabares.
Valores por encima de 2³¹ − 1 (2.147.483.647) se rechazan porque ahí se rompe el comportamiento del entero con signo de 32 bits y las operaciones bitwise empiezan a devolver resultados inesperados.
La fórmula
El widget delega en los métodos integrados de JavaScript parseInt(str, base) y Number.prototype.toString(base), así que el trabajo pesado lo hace la librería estándar. La validación impone el conjunto de dígitos correcto por base antes de analizar, así caracteres no binarios en una entrada binaria dan un error limpio en vez de un NaN truncado silencioso.
Ejemplo de cálculo
- Escribe 255 con el botón Decimal seleccionado.
- La fila de resultados muestra Binario 11111111 · Octal 377 · Decimal 255 · Hex FF.
- Pulsa Hex y escribe DEADBEEF → Decimal 3.735.928.559. (Justo bajo el tope 2³¹.)
Preguntas frecuentes
¿Por qué el límite superior es 2³¹ − 1 y no 2⁶³?
JavaScript representa números como floats de 64 bits y maneja con seguridad enteros hasta 2⁵³ − 1 en aritmética normal. Pero en cuanto tocas operaciones bitwise (& | ^ << >> ~), el runtime convierte los operandos a enteros con signo de 32 bits, así que cualquier valor por encima de 2³¹ − 1 cambia de signo o se trunca en silencio. Aquí ponemos el tope en 2³¹ − 1 para que las bases mostradas coincidan con lo que verías llevando el valor a una expresión bitwise en código real.
¿Qué pasa con los prefijos 0x y 0b?
El widget los rechaza — escribe solo los dígitos y usa el botón de base para fijar el contexto. Es intencional: un prefijo es una convención de lenguaje de programación (C, Python, JavaScript), no una propiedad del número en sí, y aceptar prefijos de forma inconsistente entre las cuatro bases hace que el validador se vuelva ruidoso. Si pegas 0xFF, quita el 0x y selecciona Hex.
¿Por qué el hex es insensible a mayúsculas pero se muestra en mayúscula?
Hex en minúsculas (ff, deadbeef) y en mayúsculas (FF, DEADBEEF) se interpretan como el mismo entero; ambos son válidos. El display lo normaliza a mayúsculas porque es la convención dominante en finanzas, hardware y la mayor parte de documentación (manuales Intel, RFCs, sintaxis de colores RGB). Las minúsculas suelen ganar en algunos contextos de desarrollo web — CSS, salida de debug de Node — pero es una elección de estilo, no de corrección. Pega cualquiera de las dos formas y funciona.