O que uma base numérica significa
A base é quantos algarismos diferentes o sistema usa antes de precisar de mais uma casa. O decimal tem dez, de 0 a 9, e depois do 9 é obrigado a abrir a casa das dezenas. O binário tem dois, e por isso abre casa muito mais rápido.
O que dá significado a cada posição é a potência da base. Em decimal, 255 é 2×10² + 5×10¹ + 5×10⁰. Em binário, 1010 é 1×2³ + 0×2² + 1×2¹ + 0×2⁰, ou seja, 10.
O número não muda de valor quando muda de base: muda só a forma de escrevê-lo. Quinze é quinze, escrito como 15, F ou 1111.
Os dois caminhos da conversão
Para ir de qualquer base para decimal, multiplique cada algarismo pela base elevada à sua posição, contada da direita para a esquerda começando em zero, e some tudo. É a soma das potências.
Para ir de decimal para qualquer base, divida sucessivamente pela base de destino, guardando os restos. Quando o quociente chegar a zero, leia os restos de baixo para cima.
Converter entre duas bases que não são decimal costuma passar pelo decimal no meio. É o que esta calculadora faz, e é o que se faz a mão — com uma exceção importante, que vem a seguir.
Por que binário e hexadecimal andam sempre juntos
Dezesseis é dois elevado a quatro. Por causa disso, cada dígito hexadecimal corresponde a exatamente quatro bits, sempre, sem sobra nem arredondamento.
Isso torna a conversão entre binário e hexadecimal imediata, sem passar por decimal: basta agrupar os bits de quatro em quatro. 11111111 vira 1111 e 1111, que são F e F: FF.
É por isso que cores em CSS, endereços de memória, códigos de erro e chaves criptográficas são escritos em hexadecimal. Não é preferência estética — é a forma mais curta de escrever binário sem perder a correspondência direta com os bits.
As letras do hexadecimal
A base 16 precisa de dezesseis símbolos diferentes, e só existem dez algarismos. As letras de A a F completam os valores de 10 a 15.
Não há nada de especial nelas: são apenas os seis símbolos que faltavam, e poderiam ser quaisquer outros. A escolha das primeiras letras do alfabeto foi convenção, e pegou.
É por isso que uma cor como #FF0000 é vermelho puro: FF é 255, o valor máximo de um canal de oito bits, e os outros dois canais estão em zero.
Só inteiros, e o motivo
Esta calculadora converte apenas números inteiros. A restrição é deliberada, e a razão é a mesma que causa um bug famoso em quase toda linguagem de programação.
O número 0,1 é exato em decimal, mas em binário é uma dízima infinita — assim como 1/3 é dízima em decimal. Como o computador guarda um número finito de bits, ele armazena um valor ligeiramente diferente de 0,1.
É exatamente por isso que 0,1 + 0,2 não devolve 0,3 exato em JavaScript, Python ou Java: devolve 0,30000000000000004. Mostrar frações convertidas exigiria decidir quantas casas truncar, e qualquer escolha ensinaria algo errado.