Por que somar 0.1 e 0.2 não dá 0.3? Porque 0.1 é uma dízima periódica em binário. Convertemos frações entre bases por multiplicações sucessivas, vemos os bits de um float com struct e duas saídas práticas: inteiros para dinheiro e math.isclose para comparar.
Para subtrair, o processador soma o primeiro número com o complemento do segundo, e um único somador faz as duas operações. Veremos o complemento de dois, por que 8 bits com sinal vão de -128 a +127 e como o overflow derrubou o Ariane 5 e travou o Pac-Man na fase 256.
As regras de soma e subtração da base 10 valem em qualquer base: muda só o valor que dispara o vai-um. Fazemos contas em binário, octal e hexadecimal, vemos por que com três parcelas o vai-um pode valer 2 e implementamos os dois algoritmos em Python.
Em qualquer base, o valor da própria base se escreve 10. Partimos da notação posicional para converter inteiros entre decimal, binário, octal e hexadecimal, com expansão, divisões sucessivas, agrupamento de bits e as funções bin, oct, hex e int do Python.