Inicio · Parte 01 — Aritmética computacional y representación numérica
x << k = x · 2ᵏ
x >> k = ⌊x / 2ᵏ⌋ (para x ≥ 0)
x & (x−1) apaga el bit menos significativo encendido
Sumar en binario funciona igual que en decimal: se suma columna a columna y se arrastra el acarreo. La única diferencia es que el acarreo salta cuando la suma llega a 2 en lugar de a 10. Esta simplicidad es la razón por la que el hardware usa base 2: un sumador completo de un bit cabe en unas pocas puertas lógicas.
Los desplazamientos son la operación más barata de un procesador y equivalen a multiplicar o dividir por potencias de 2. x << 3 es x · 8, y x >> 1 es la división entera por 2. Los compiladores hacen esta sustitución automáticamente, pero reconocerla ayuda a leer código de bajo nivel y algoritmos de hashing.
Las operaciones bit a bit —AND, OR, XOR— actúan sobre cada posición de forma independiente, sin acarreo. AND enmascara (deja pasar solo los bits marcados), OR activa, XOR conmuta. XOR tiene una propiedad que se usa constantemente en criptografía: es su propia inversa, (a ^ b) ^ b = a.
Un idiom que conviene conocer: x & (x−1) apaga el bit encendido más a la derecha, porque restar 1 invierte ese bit y todos los ceros a su derecha. Contar cuántas veces se puede aplicar antes de llegar a cero cuenta los bits encendidos (popcount), y esa cuenta aparece en distancias de Hamming y en índices de bases de datos.
Operaciones sobre a = 1011₂ (11) y b = 0110₂ (6).
a = 1011 (11)
b = 0110 (6)
a + b = 10001 (17) acarreo hasta el quinto bit
a & b = 0010 (2) solo donde ambos tienen 1
a | b = 1111 (15) donde alguno tiene 1
a ^ b = 1101 (13) donde difieren
a << 2 = 101100 (44) = 11 · 4 ✓
a >> 1 = 101 (5) = ⌊11/2⌋ ✓
Verificación XOR: (a ^ b) ^ b = 1101 ^ 0110 = 1011 = a ✓
Suma y desplazamiento en binario, con acarreo visible.
python classes/part-01-aritmetica-computacional-y-representacion-numerica/024-aritmetica-binaria/lab.py
compmath run 024
aba+ba&ba|ba^ba<<2 (multiplica por 4)a>>1 (divide por 2){
"a": "1011",
"b": "0110",
"a+b": "10001",
"a&b": "0010",
"a|b": "1111",
"a^b": "1101"
}
Hashing, compresión, criptografía, banderas de configuración, índices de bitmap y optimización de bucles. La distancia de Hamming entre dos cadenas de bits es el popcount de su XOR.
float32, bfloat16 y la cuantización a int8 son decisiones de representación. Los NaN en un entrenamiento casi siempre nacen aquí, no en la arquitectura.
9780133084993, pendiente de resolver.