Bitschieber (Redstone)

Ein Bitschieber führt verschiedene bitweise Verschiebeoperationen aus. Dazu zählen logische und arithmetische Verschiebung sowie zyklische Verschiebung (auch bitweise Rotation genannt). Die Operationen haben eine Richtung, in die geschoben wird und eine Weite, welche angibt, um wie viele Bits geschoben wird. Eine Weite von n lässt sich auch dadurch erzeugen, dass die Operation n-mal mit einer Weite von eins ausgeführt wird.

Man kann einen Addierer verwenden (kann nur nach links schieben). Dies ist sehr praktisch weil keine zusätzliche Logik benötigt wird, allerdings ist die Vielfalt der Operationen stark eingeschränkt

Ein Schieberegister (oder auch ein Ringzähler) wird ähnlich wie in Variante 1 bedient, ist allerdings nur auf bitweise Verschiebeoperationen begrenzt. Dafür ist es deutlich kompakter und dadurch auch schneller.

## Variante 1

* Grundmodule
* Redstone-Element
* Redstone-Signal
* Grund-Element (Redstone)
* Signal-Element (Redstone)
* Signalleitung (Redstone)
* Schaltkreise
 * Schaltkreise/Logikgatter (Redstone)
* Schaltnetze/Addierer (Redstone)

* 1 Goldblock
* 1 Diamantblock
* 1 Hebel
* 1 Redstone
* 1 Redstone-Fackel
* 1 Redstone-Verstärker
* 1 Klebriger Kolben

Ein Bauteil, das alle benötigten Schiebeoperationen mit einer Weite von 1 in einer konstanten Zeit ausführt. Der Ausgang wird mit dem Eingang kurzgeschlossen, sodass durch Warten die Operation mehrmals ausgeführt wird. Nach der Zeit, die für n Durchgänge benötigt wird, abbrechen und das Ergebnis ausgeben. Kann gut in einer bereits existierenden ALU integriert werden.

## Barrel Shifter

Ein Barrel Shifter berechnet die zyklische Verschiebung für jede Mögliche Distanz. Über einen Multiplexer wird dann ausgewählt, welcher der Ausgänge verwendet werden soll. Das ganze lässt sich sehr effektiv in Matrixform bauen. Vorteil ist, dass er immer eine konstante Laufzeit hat, was sich besonders bei großen Schiebedistanzen und großen Bitbreiten bemerkbar macht. Außerdem lassen sich sämtliche Verschiebeoperationen durch in realisieren. Nachteil ist, dass das Bauteil relativ groß ist und mit der Bitweite die Größe quadratisch ansteigt.

Von sich aus kann der Barrel Shifter nur eine einzige Operation: zyklische Verschiebung in eine Richtung (egal welche). Allerdings lässt sich eine Verschiebung in die andere Richtung leicht realisieren: bei einer Bitbreite von acht bit ist eine Rotation um 5 Bits nach links das selbe wie eine um 3 Bits nach rechts. Durch eine einfache Subtraktion (oder kluge Logik) kann das Bauteil auf beide Richtungen erweitert werden.

Eine logische Verschiebung lässt sich dadurch erzielen, indem man die Bits, die bei der zyklischen Verschiebung "rausfallen" und auf der anderen Seite landen abschaltet. Eine zyklische Verschiebung um drei bit nach rechts wird zu einer logischen Verschiebung, wenn man die drei höchsten Bit abschaltet. Genauso wird eine zyklische Verschiebung um ein bit nach links zu einer logischen, wenn man das höchste Bit auf Null setzt. Das kann durch ein UND-Gatter oder einfacher durch eine Piston-Schaltung erreicht werden.

Arithmetische Verschiebung nach rechts benötigt zusätzliche Logik, um die übertragenen Bits nicht auszuschalten, sondern auf den Wert des Vorzeichenbits der Eingangszahl zu bringen. Arithmetische Verschiebung nach links wiederum ist äquivalent zur logischen Verschiebung nach links und benötigt daher keine zusätzliche Logik.

*Volladdierer* => Redstone;
*Halbsubtrahierer* => Redstone;
*Vollsubtrahierer* => Redstone;
***Bitschieber* =>** **Redstone**;
*Addierwerk* => Redstone, Befehle;
*Subtrahierwerk* => Redstone, Befehle;
*Multiplizierwerk* => Redstone, Befehle;
*Dividierwerk* => Redstone, Befehle;
*Moduluswerk* => Befehle;
*Zahlenrechner* => Redstone;
*Rechenwerk* => Redstone;
*Rechner* => Redstone;