Que signifient « & », « | », « ^ » dans le code, et comment activer le bit 5 ?
Les opérateurs bitwise sont la base de nombreuses astuces bas niveau : masques de permissions (Unix `chmod`), bit flags, optimisations numériques (`x & 1` au lieu de `x % 2`), parsing de protocoles réseau (flags TCP, couleurs RGBA), gestion mémoire.
Tapez deux nombres dans A et B (en dec, hex 0x, bin 0b, oct 0o, auto-détectés), choisissez une largeur (8-bit, 16-bit, 32-bit, 64-bit) et observez chaque opération en direct : AND, OR, XOR, NOT, shifts, rotations, popcount, lowest set bit.
Chaque résultat est affiché dans une grille de bits (cliquez un bit pour le basculer), en binaire, dec (signed + unsigned), hex et oct. Calculé en BigInt, donc les valeurs 64-bit fonctionnent correctement même au-delà de `Number.MAX_SAFE_INTEGER`.
Mode d'emploi
- Choisissez une largeur : 8 / 16 / 32 / 64 bits. Décide combien de bits l'opérande a et comment l'overflow est détecté.
- Activez Signed si vous voulez les valeurs interprétées en complément à deux (par exemple -1 en 8-bit = 0b11111111).
- Saisissez A et B. Accepte tous les formats : `255`, `0xFF`, `0b11111111`, `0o377`. Format auto-détecté depuis le préfixe.
- Cliquez sur un bit dans la grille pour le basculer (toggle). Les opérations se recalculent immédiatement, plus de 12 résultats se mettent à jour en direct.
- Pour les shifts et rotations, réglez n avec le curseur. Pour les ops sur un bit unique (set/clear/toggle/test), réglez bit N.
- « Highlight differing bits » affiche en orange les bits que l'opération a modifiés, parfait pour voir ce que `XOR` ou `<<` fait vraiment.
- Copiez n'importe quel résultat dans n'importe quel format (BIN, HEX, OCT, DEC) en un clic.
Quand c'est utile
Situations réelles où il faut connaître les opérations bitwise :
- Permissions de fichiers Unix : `chmod 755` est un bitmask. `rwxr-xr-x` = `0b111101101` = 0o755 = 493 dec. Chaque bit est un flag (read/write/execute × owner/group/other).
- Flags TCP/IP : l'en-tête TCP a 9 bits de flags (SYN, ACK, FIN, RST, PSH, URG...). Un parser les décode avec des masques : `flags & 0x01` est FIN, `flags & 0x02` est SYN, etc.
- Couleurs RGBA : 32-bit empaquette 4 canaux de 8 bits chacun. `red = (color >> 24) & 0xFF`, `green = (color >> 16) & 0xFF`, etc.
- Flags de configuration : les bibliothèques C/Rust passent des dizaines d'options en un seul int. `OPT_ASYNC | OPT_VERBOSE | OPT_RETRY`. Vérification : `if (opts & OPT_ASYNC)`.
- Fonctions de hachage et crypto : les implémentations de MD5, SHA, AES utilisent rotations (`ROL`, `ROR`), XORs et shifts. Généralement 32-bit.
- Bitmap indexes dans les bases : Postgres, Oracle, MySQL utilisent des ops bitwise pour le filtrage.
- GPIO matériel : Arduino, ESP32, Raspberry Pi contrôlent les pins avec `PORTB |= (1 << 5)`. Chaque bit = état du pin.
- Masques d'adresses réseau : `192.168.1.0/24` est le masque `0xFFFFFF00`. Pour vérifier qu'une IP est dans le réseau : `(ip & mask) == network`.
- Algorithmes : bitset comme ensemble compact, Brian Kernighan pour le popcount, crible d'Ératosthène sur bits, arbre de Fenwick.
Pour convertir entre bases, voir notre convertisseur de bases. Pour les conversions de tailles d'octets, voir le convertisseur de tailles de fichiers.