Wie Shift Binäre Werte in C-Programmierung

Die Programmiersprache C verfügt über zwei binäre Operatoren, die die äquivalente Operation durchführen von # 147-Jeder einen Schritt nach links (oder rechts) zu bewegen. # 148- Die lt; lt; und >> Operatoren verschieben Bits in Wert, so dass sie nach links oder rechts marschiert sind. Hier ist das Format für die lt; lt; Operator:

v = int lt; lt; Graf-

int ist ein Integer-Wert. Zahl ist die Anzahl der Plätze der Wert des Bits nach links zu verschieben. Das Ergebnis dieser Operation wird in Variablen gespeichert v. Irgendwelche Bits, die links über die Breite des verschoben int Variable x sind verloren. Neue Bits verschoben von rechts sind immer 0.

Wie bei den meisten binären Unsinn, hilft es, zu sehen, was in einem Wert los ist, wenn seine Bits verschoben werden.

JEDER aus dem Pool!

#include char * binbin (int n) -int main () {int BSHIFT, x-printf ( "Geben Sie einen Wert von 0 bis 255:") -scanf ( "% d", BSHIFT) -für (x = 0- XLT; 8-x ++) {printf ( "% s n", binbin (BSHIFT)) - BSHIFT = BSHIFT lt; lt; 1-} return (0) -} char * binbin (int n) {static char bin [9] -int x-for (x = 0-XLT; 8-x ++) {bin [x] = n 0x80? '1': '0'-n lt; lt; = 1} bin [x] = ' 0'-return (bin) -}

Der Schichtbetrieb erfolgt bei Linie 15 in alle aus dem Pool !. Der Wert in Variable BSHIFT nach links ein Bit verschoben.

Übung 1: Geben Sie den Quellcode von jeder aus dem Pool! in Ihren Editor und ein neues Projekt aufzubauen.

Der Nettoeffekt eines linken Bitverschiebung ist, einen Wert zu verdoppeln. Das gilt bis zu einem gewissen Punkt: Offensichtlich ist, desto weiter links Sie verschieben, gehen einige Bits verloren und der Wert nicht mehr zu verdoppeln. Außerdem funktioniert dieser Trick nur für Werte ohne Vorzeichen.

Übung 2: Ändern Sie den Quellcode von jeder aus dem Pool! so dass die printf () Funktion auf Linie 14 zeigt auch den Dezimalwert der BSHIFT Variable. Sie sollten auch die binbin () Funktion ändern, so dass es 16 Stellen zeigt statt 8.

Hier ist der Ausgang, wenn Sie den Wert mit 12:

Geben Sie einen Wert von 0 bis 255: 120000000000001100 120000000000011000 240000000000110000 480000000001100000 960000000011000000 1920000000110000000 3840000001100000000 7680000011000000000 1536

Versuchen Sie, den Wert 800.000.000 (Sie die Kommas nicht geben), um zu sehen, wie die Verdoppelung der Regel versagt als die Werte nach links verschieben halten. Siehe auch die in der Nähe Sidebar # 147-Negative Binärzahlen # 148.

Der >> Shift-Operator funktioniert ähnlich wie die lt; lt; Verschiebungs-Operator, obwohl Werte werden nach rechts statt links marschierten. Jedes Bit, das den marschierte das rechte Ende ausgeschaltet wird verworfen und nur Null-Bits sind auf der linken Seite eingesetzt. Hier ist das Format:

v = int >> Count-

int ein ganzzahliger Wert ist, und Graf ist die Anzahl der Orte, um die Bits nach rechts zu verschieben. Das Ergebnis wird in der Variablen gespeichert v.

Übung 3: Ändern Sie den Quellcode von Übung 2, so dass die rechte Shift-Operator anstelle der Linksverschiebung bei Line 15. Erstellen Sie das Programm verwendet wird.

Hier ist das Ergebnis, wenn Sie den Wert mit 128:

Geben Sie einen Wert von 0 bis 255: 1280000000010000000 1280000000001000000 640000000000100000 320000000000010000 160000000000001000 80000000000000100 40000000000000010 20000000000000001 1

im Gegensatz zu den lt; lt; Betreiber ist die >> garantiert immer den Wert halbiert, wenn Sie eine Stelle nach rechts verschieben. In der Tat ist der Operator >> viel schneller auf einen Integer-Wert zu verwenden, als die / (Division) Bediener einen Wert von 2 zu teilen.

Das lt; lt; und >> Betreiber sind nur in der C-Sprache. In C ++ werden ähnliche Operatoren verwendet Standardeingabe zu empfangen und die Standardausgabe senden.

Binäre Zahlen sind immer positiv, wenn man bedenkt, dass die Werte eines Bits kann nur 1 oder 0 und nicht -1 und 0 Wie funktioniert der Computer unterzeichnet ganzen Zahlen zu tun? Ganz einfach: Es betrügt.

Das Bit ganz links in einem vorzeichenbehafteten binären Wert wird als die bekannte Vorzeichenbit. Wenn das Bit (gleich 1) gesetzt ist, ist der Wert negativ für einen signed int. Andernfalls wird der Wert als positiv abgelesen.

bild0.jpg

In diesem Beispiel wird das Vorzeichen-Bit für ein signed char gesetzt. Die Werte ausgedrückt sind negativ, was im Bereich eines signierten char-Variable ist.

image1.jpg

In diesem Beispiel wird das Vorzeichen-Bit ignoriert, da der Wert ein unsigned char ist. Die Werte können nur positiv sein, weshalb die positiven Bereich für eine nicht signierte Variable größer ist als für eine signierte Variable.

Menü