Fragen
Wo kann ich das ausprobieren?
Der Bitweise-Rechner zeigt jedes Bit des Ergebnisses für UND, ODER, XOR, Shifts und Rotationen bei 8–64 Bit, und der Bitmasken-Rechner baut Masken aus Positionen.
Jedes Idiom hier funktioniert in C, Go, Rust, Java und JavaScript (32 Bit) mit denselben Operatoren; auch in Python, mit unbegrenzten Ganzzahlen.
| a & b | UND: 1, wo beide 1 sind |
| a | b | ODER: 1, wo eines 1 ist |
| a ^ b | XOR: 1, wo sie sich unterscheiden |
| ~a | NICHT: alle Bits kippen (= −a − 1 im Zweierkomplement) |
| a << n | Linksshift: × 2ⁿ |
| a >> n | Rechtsshift: ÷ 2ⁿ, rundet bei vorzeichenbehaftet gegen −∞ (arithmetisch) |
| a >>> n | logischer Rechtsshift (JS, Java); anderswo vorzeichenlose Typen |
| x & (1 << n) | testen: ungleich null, wenn gesetzt |
| (x >> n) & 1 | Bit als 0 oder 1 holen |
| x | (1 << n) | setzen |
| x & ~(1 << n) | löschen |
| x ^ (1 << n) | kippen |
| (x & ~(1 << n)) | (b << n) | Bit n auf b setzen |
| (1 << n) - 1 | Maske der unteren n Bits |
| ((1 << w) - 1) << lo | Maske von w Bits ab lo |
| (x >> lo) & ((1 << w) - 1) | w-Bit-Feld bei lo extrahieren |
| (x & ~m) | ((v << lo) & m) | v in Feld mit Maske m einfügen |
| (x & FLAGS) == FLAGS | alle Flags gesetzt |
| x & FLAGS | irgendein Flag gesetzt |
| x & -x | niedrigstes gesetztes Bit isolieren |
| x & (x - 1) | niedrigstes gesetztes Bit löschen |
| x | (x + 1) | niedrigstes gelöschtes Bit setzen |
| x & (x + 1) | nachlaufende Einsen löschen |
| x | (x - 1) | nachlaufende Nullen setzen |
| ctz(x) = log₂(x & -x) | Index des niedrigsten gesetzten Bits (__builtin_ctz, bits.TrailingZeros) |
| 31 - clz(x) | Index des höchsten gesetzten Bits = ⌊log₂ x⌋ |
| x && !(x & (x - 1)) | ist Zweierpotenz |
| (x & 1) == 0 | ist gerade |
| (x ^ y) < 0 | entgegengesetzte Vorzeichen (vorzeichenbehaftet) |
| (x & (a - 1)) == 0 | auf a ausgerichtet (a = 2ⁿ) |
| x == (x & 0xFF) | passt in ein Byte |
| (x + a - 1) & -a | auf Vielfaches von a aufrunden (a = 2ⁿ) |
| x & -a | auf Vielfaches von a abrunden |
| x & (a - 1) | x mod a (a = 2ⁿ, x ≥ 0) |
| (x + y) >> 1 | Mittelwert (kann überlaufen); (x & y) + ((x ^ y) >> 1) nicht |
| x ^= y; y ^= x; x ^= y | Tausch ohne Hilfsvariable (langsamer als eine; eine Kuriosität) |
| (x ^ (x >> 31)) - (x >> 31) | Absolutwert, 32 Bit vorzeichenbehaftet |
| x ^ (x >> 1) | binär → Gray-Code |
| while (x) { x &= x - 1; n++; } | Popcount (Kernighan); oder __builtin_popcount, bits.OnesCount, int.bit_count() |
| x ^ y, dann Popcount | Hamming-Distanz |
| popcount(x) & 1 | Parität |
| bswap32(x) / bits.ReverseBytes32 | Byte-Reihenfolge tauschen (Endianness) |
| bits.Reverse32(x) | Bit-Reihenfolge umkehren |
1 << 32 == 1).~ auf vorzeichenlosen Typen in C erweitert; zurückcasten.& bindet schwächer als ==; schreiben Sie (x & m) == m.Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.
Der Bitweise-Rechner zeigt jedes Bit des Ergebnisses für UND, ODER, XOR, Shifts und Rotationen bei 8–64 Bit, und der Bitmasken-Rechner baut Masken aus Positionen.