Preguntas
¿Dónde puedo probar esto?
La calculadora bit a bit muestra cada bit del resultado de AND, OR, XOR, desplazamientos y rotaciones de 8 a 64 bits, y la calculadora de máscaras de bits construye máscaras a partir de posiciones.
Todos los modismos de aquí funcionan en C, Go, Rust, Java y JavaScript (32 bits) con los mismos operadores; también en Python, con enteros ilimitados.
| a & b | AND: 1 donde ambos son 1 |
| a | b | OR: 1 donde alguno es 1 |
| a ^ b | XOR: 1 donde difieren |
| ~a | NOT: invierte todos los bits (= −a − 1 en complemento a dos) |
| a << n | desplazar a la izquierda: × 2ⁿ |
| a >> n | desplazar a la derecha: ÷ 2ⁿ, redondea hacia −∞ con signo (aritmético) |
| a >>> n | desplazamiento lógico a la derecha (JS, Java); tipos sin signo en otros |
| x & (1 << n) | probar: distinto de cero si está activo |
| (x >> n) & 1 | obtener el bit como 0 o 1 |
| x | (1 << n) | activar |
| x & ~(1 << n) | borrar |
| x ^ (1 << n) | alternar |
| (x & ~(1 << n)) | (b << n) | poner el bit n a b |
| (1 << n) - 1 | máscara de los n bits bajos |
| ((1 << w) - 1) << lo | máscara de w bits a partir de lo |
| (x >> lo) & ((1 << w) - 1) | extraer un campo de w bits en lo |
| (x & ~m) | ((v << lo) & m) | insertar v en el campo con máscara m |
| (x & FLAGS) == FLAGS | todas las banderas activas |
| x & FLAGS | alguna bandera activa |
| x & -x | aislar el bit activo más bajo |
| x & (x - 1) | borrar el bit activo más bajo |
| x | (x + 1) | activar el bit a cero más bajo |
| x & (x + 1) | borrar los unos finales |
| x | (x - 1) | activar los ceros finales |
| ctz(x) = log₂(x & -x) | índice del bit activo más bajo (__builtin_ctz, bits.TrailingZeros) |
| 31 - clz(x) | índice del bit activo más alto = ⌊log₂ x⌋ |
| x && !(x & (x - 1)) | es potencia de dos |
| (x & 1) == 0 | es par |
| (x ^ y) < 0 | signos opuestos (con signo) |
| (x & (a - 1)) == 0 | alineado a a (a = 2ⁿ) |
| x == (x & 0xFF) | cabe en un byte |
| (x + a - 1) & -a | redondear hacia arriba a múltiplo de a (a = 2ⁿ) |
| x & -a | redondear hacia abajo a múltiplo de a |
| x & (a - 1) | x mod a (a = 2ⁿ, x ≥ 0) |
| (x + y) >> 1 | media (puede desbordar); (x & y) + ((x ^ y) >> 1) no |
| x ^= y; y ^= x; x ^= y | intercambio sin temporal (más lento que un temporal; una curiosidad) |
| (x ^ (x >> 31)) - (x >> 31) | valor absoluto, 32 bits con signo |
| x ^ (x >> 1) | binario → código Gray |
| while (x) { x &= x - 1; n++; } | popcount (Kernighan); o __builtin_popcount, bits.OnesCount, int.bit_count() |
| x ^ y, luego popcount | distancia de Hamming |
| popcount(x) & 1 | paridad |
| bswap32(x) / bits.ReverseBytes32 | intercambiar el orden de bytes (endianness) |
| bits.Reverse32(x) | invertir el orden de los bits |
1 << 32 == 1).~ sobre tipos sin signo en C ensancha; vuelve a convertir.& liga menos que ==; escribe (x & m) == m.Los resultados y mensajes de esta herramienta se muestran en inglés.
La calculadora bit a bit muestra cada bit del resultado de AND, OR, XOR, desplazamientos y rotaciones de 8 a 64 bits, y la calculadora de máscaras de bits construye máscaras a partir de posiciones.