This Frage gibt Erklärung über SWAR algorithm zum Zählen der Anzahl von 1s in einer bestimmten Anzahl verwendet. Während Erläuterung ilmari schrieben 0x01010101 = (1 < < 24) + (1 < < 16) + (1 < < 8) + 1. Kann jemand erklären, wie es gleich ist?Wie 0x01010101 entspricht 1 << 24 + 1 << 16 + 1 << 8 + 1
Antwort
Sie müssen zuerst verstehen, was der Operator <<
tut. Es führt eine bitweise Verschiebung nach links durch. Lassen Sie uns das 0b
Präfix für binäre Notation und 0x
für hexadezimale Schreibweise annehmen:
1 << 8 = 0b100000000 = 256 = 0x100
Ähnlich:
1 << 16 = 0b10000000000000000 = 65536 = 0x10000
So:
(1 << 8) + (1 << 16) = 0x10100
Durch das Hinzufügen (1 << 24)
und 1
, erhalten Sie die Endergebnis: 0x01010101
.
Bitte beachten Sie, dass es, obwohl es sehr viel wie ein Binärwert aussieht, ist es eine hexadezimale. Wenn wir es als binär schreiben, erhalten wir:
0b1000000010000000100000001
^ ^ ^ ^
bit #24 bit #16 bit #8 bit #0
1 0000 0000 0000 0000 0000 0000 Shifting 1 left by 24 places
1 0000 0000 0000 0000 Shifting 1 left by 16 places
1 0000 0000 Shifting 1 left by 8 places
1
================================
1 0000 0001 0000 0001 0000 0001 Result after adding
I.e. 0x01010101.
Beginnen wir mit der Gesamtzahl beginnen:
Hex: 0x01010101
Decimal: 16843009
Binary: 1000000010000000100000001
nun auf sie einzeln betrachten. Beginnen Sie mit 1 << 24
(aka 1 left shifted 24-mal, auch bekannt als eine binäre 1 mit 24 Nullen..):
Calculation: 1 << 24
Decimal: 16777216
Binary: 1000000000000000000000000
// ^25th position because 1 was shifted 24 times to the left
Calculation: 1 << 16
Decimal: 65536
Binary: 0000000010000000000000000
// ^17th position because 1 was shifted 16 times to the left
Calculation: 1 << 8
Decimal: 256
Binary: 0000000000000000100000000
// ^9th position because 1 was shifted 8 times to the left
1 offensichtlich ist, so will ich nicht gehören. Nun fügen sie alle zusammen:
1000000000000000000000000 = 1 << 24
0000000010000000000000000 = 1 << 16
0000000000000000100000000 = 1 << 8
+ 0000000000000000000000001 = 1
|-------|-------|-------|
1000000010000000100000001 = 16843009
Und dann sind wir am Anfang zurück, 16843009
in hex ist 0x01010101
.
- 1. Warum 1 << 4 statt 16?
- 2. Bedeutung von ((float) rand()/(float) ((1 << 31) - 1))
- 3. Warum ist die maximale Kapazität einer Java HashMap 1 << 30 und nicht 1 << 31?
- 4. -2 <1 = falsch. Warum?
- 5. Was bedeutet typedef Enum-Syntax wie '1 << 0'?
- 6. Wie Ausdruck konvertieren "<< = 1" in Java zu Python
- 7. Was bedeutet typedef Enum-Syntax wie '1 << 0'?
- 8. cuda double chevron wie 1 << 20?
- 9. Summation on 1 <= i <j <k <= n in GLPK
- 10. Warum Ausgabe von cout << setprecision (2) << 0.999 ist 1 statt 1.0?
- 11. Warum std :: cout << haupt << std :: endl druckt 1?
- 12. Valueerror: num muss 1 <= num <= 2, nicht 3
- 13. Python ein Liner, um sicherzustellen, 0 <= Wert <= 1?
- 14. Was macht `1 << 0 in diesem Code-Snippet?
- 15. Was bedeutet es durch Typ = 1 << 0?
- 16. Findet "cout << (char *) NULL" "close (1)" hier?
- 17. Auswerten des Ausdrucks 1 <= Monat <= 12
- 18. Binärformat, bitweise Operationen existieren? z.B. << 16 # 7F, 16 # FF >> bsl 1
- 19. Was bedeutet diese C++ Codezeile? Sol <? = F ((1 << n) -1, i, 0) + abs (P [i]) * Preis; "
- 20. Können wir die Einheit des Funkenstrom-Chargenintervalls ändern?</p> <pre><code>ssc = StreamingContext(sc, 1) </code></pre> <p>Das 1 hier Intervall bedeutet hier 1 Sekunde Partie:
- 21. Dateityppromotions während arithmetischer Operationen: -1 <(unsinged int) 1 == falsch
- 22. Warteschlange <T> O (1) Zeit
- 23. Hibernate Kriterien: NOW() <Datum + 1 Tag
- 24. ImageView setScaleX/Y mit Skalierungsfaktor <1
- 25. Uncaught SyntaxError: Unerwartetes Token <jquery.min.js: 1
- 26. Warum `1 << 32` und` int i = 32; 1 << i` zeigen anderes Ergebnis? Ist es ein Fehler oder eine Funktion?
- 27. „<<<<<<“ Symbol im Quellcode
- 28. Was bedeutet diese pData [1 + 2 * i] << 8 | pData [2 + 2 * i] C++ - Syntax?
- 29. THREE.Camera.prototype.lookAt</ <() - Was bedeutet</ <?
- 30. Git fügt <<<<<<< HEAD zu Datei