Um auf derselben Seite zu sein, nehmen wir sizeof (int) = 4 und sizeof (long) = 8 an.Effizientes Bitshifting eines Arrays von int?
Angesichts einer Reihe von ganzen Zahlen, was wäre eine effiziente Methode, um logisch das Array nach links oder rechts zu verschieben?
Ich überlege mir eine Hilfsvariable wie long, die das Bitshift für das erste Paar von Elementen berechnet (Index 0 und 1) und setze das erste Element (0). Auf diese Weise wird das Bitshift für Elemente (Index 1 und 2) Computer sein, und dann wird Index 1 gesetzt.
Ich denke, das ist eigentlich eine ziemlich effiziente Methode, aber es gibt Nachteile. Ich kann Bitshift nicht größer als 32 Bit machen. Ich denke, die Verwendung mehrerer Hilfsvariablen würde funktionieren, aber ich stelle mir eine Rekursion irgendwo auf der Linie vor.
@nn - es ist ein wenig unklar, was Sie hier sind. Was möchten Sie mit den verschobenen und verlorenen Daten tun? Möchten Sie Daten logisch verschieben oder arithmetisch verschieben? Oder sind Sie gerade nach dem Lesen einer Auswahl von Binärdaten Bits zufällig? Lesen Sie zum Beispiel ein 4-Byte-Int von Position-Bit 27 bis Bit 59 von einem 100-Byte-Binärdatenstrom? – ChrisBD
@ChrisBD: Sorry gute Frage. Logisch verschieben. Ich manipuliere tatsächlich große ganze Zahlen, die als ein Array von Inten dargestellt werden, wobei jedes int einer Ziffer in der Basis 2 entspricht^(sizeof (int) * 8) = 2^32. – snap
Ich habe ein paar wizzardry Referenzen gesucht und ich habe keinen Trick dafür gesehen, ich denke, der offensichtliche Weg ist der einzige Weg: -/ – fortran