Frage

Ich habe eine Warteschlange und eine Reihe von Warteschlangen. buckets ist das Array und collector ist die Warteschlange. pass ist eine Ganzzahl, die speichert, um welchen Durchgang es sich handelt.Ich habe eine Methode, die mir den Inhalt der ersten Zelle der aufgerufenen Warteschlange zurückgibt peek(). shiftOne() ist eine Methode, die den Kopf einer Warteschlange an das Ende einer anderen verschiebt.

Jetzt funktioniert dieser Code bei mir nicht

bucket[((collector.peek()>>(pass * 8)) &0xFF)].shiftOne(collector);

Ich bin Schritt für Schritt vorgegangen und habe festgestellt, dass ich die Teile nicht richtig maskiere.Ich kann sie verschieben, aber das ist auch schon alles.Also werde ich versuchen, auf Element 102 für ein Array mit 10 Elementen zuzugreifen.Was mache ich falsch?Ich weiß peek() Und shiftOne() weil ich nach Potenzen und Modulen sortieren kann.

War es hilfreich?

Lösung

Sie verwechseln Basis-10 mit Basis-2.

Bei der Bitverschiebung handelt es sich um eine Division durch 2, also zum Beispiel: 102 >> 1 = 102 / 2 = 51.
Ähnlich: 102 >> 8 = 102 / 2^8 = 102 / 256 = 0 (in int Bedingungen).

Der Code (i >> 8) & 0xFF wird beispielsweise verwendet, um den Inhalt von zu extrahieren das zweite Byte des Gegebenen i Wert.

Halten Sie sich in Ihrem Fall an die Division durch 10 mit Modul.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top