logo

Linksverschiebungs- und Rechtsverschiebungsoperatoren in C/C++

Linksverschiebung (<<)

Es handelt sich um einen binären Operator, der zwei Zahlen annimmt, die Bits des ersten Operanden nach links verschiebt und der zweite Operand über die Anzahl der zu verschiebenden Stellen entscheidet. Mit anderen Worten, eine Ganzzahl nach links verschieben A mit einer ganzen Zahl B bezeichnet als ' (a< entspricht einer Multiplikation A mit 2^b (2 zur Macht erhoben b).

Syntax:



a << b;>
    a: Erster Operand b: Zweiter Operand

Beispiel: Lass uns nehmen a=5 ; welches ist 101 in binärer Form. Nun, wenn a wird um 2 nach links verschoben d.h a=a<<2 Dann A wird werden a=a*(2^2) . Daher, a=5*(2^2)=20 was geschrieben werden kann als 10100.

Linksschaltoperatorfunktion

C




Ersetzen Sie die Zeichenfolge in Java





// C Program to demonstrate use> // of left shift operator> #include> // Driver code> int> main()> {> >// a = 5(00000101), b = 9(00001001)> >unsigned>char> a = 5, b = 9;> >// The result is 00001010> >printf>(>'a<<1 = %d '>, (a << 1));> >// The result is 00010010> >printf>(>'b<<1 = %d'>, (b << 1));> >return> 0;> }>

>

>

C++




// C++ Program to demonstrate use> // of left shift operator> #include> using> namespace> std;> // Driver code> int> main()> {> >// a = 5(00000101), b = 9(00001001)> >unsigned>char> a = 5, b = 9;> >// The result is 00001010> >cout <<>'a<<1 = '> << (a << 1) << endl;> >// The result is 00010010> >cout <<>'b<<1 = '> << (b << 1) << endl;> >return> 0;> }>

>

>

Ausgabe

a<<1 = 10 b<<1 = 18>

Rechtsverschiebung (>>)

Es handelt sich um einen binären Operator, der zwei Zahlen annimmt, die Bits des ersten Operanden nach rechts verschiebt und der zweite Operand über die Anzahl der zu verschiebenden Stellen entscheidet. Mit anderen Worten, eine Ganzzahl nach rechts verschieben A mit einer ganzen Zahl B bezeichnet als ' (a>>b) ‘ entspricht der Division von a durch 2^b.

Syntax:

a>> b;>
    a: Erster Operand b: Zweiter Operand

Beispiel: Lass uns nehmen a=5 ; welches ist 101 in binärer Form. Nun, wenn a ist um 2 nach rechts verschoben d.h. a=a>>2 Dann A wird werden a=a/(2^2) . Daher, a=a/(2^2)=1 was geschrieben werden kann als 01 .

Rechtsschaltoperatorfunktion

C




// C Program to demonstrate> // use of right-shift operator> #include> // Driver code> int> main()> {> >// a = 5(00000101), b = 9(00001001)> >unsigned>char> a = 5, b = 9;> >// The result is 00000010> >printf>(>'a>>1 = %d '>, (a>> 1));> >// The result is 00000100> >printf>(>'b>>1 = %d'>, (b>> 1));> >return> 0;> }>

>

Zeichen in int in Java umwandeln
>

C++




// C++ Program to demonstrate> // use of right-shift operator> #include> using> namespace> std;> // Driver code> int> main()> {> >// a = 5(00000101), b = 9(00001001)> >unsigned>char> a = 5, b = 9;> >// The result is 00000010> >cout <<>'a>>1 = '> <>1)<< endl;> >// The result is 00000100> >cout <<>'b>>1 = '> <>1)<< endl;> >return> 0;> }>

>

>

Ausgabe

a>>1 = 2 b>>1 = 4>

Wichtige Punkte

1. Die Linksverschiebungs- und Rechtsverschiebungsoperatoren sollten nicht für negative Zahlen verwendet werden. Das Ergebnis ist undefiniertes Verhalten, wenn einer der Operanden eine negative Zahl ist. Beispielsweise sind die Ergebnisse von 1>> -1 und 1 << -1 undefiniert.

C




// C program to show behaviour of shift operators for> // negative values> #include> int> main()> {> >// left shift for negative value> >printf>(>'2 << -5 = %d '>, (2 << -5));> >// right shift for negative value> >printf>(>'2>> -5 = %d'>, (2>> -5));> >return> 0;> }>

>

>

C++




// C++ program to show behaviour of shift operators for> // negative values> #include> using> namespace> std;> int> main()> {> >// left shift for negative value> >cout <<>'2 << -5 = '> << (2 << -5) << endl;> >// right shift for negative value> >cout <<>'2>> -5 = '> <>-5)<< endl;> >return> 0;> }>

>

>

Ausgabe

2 <>-5 = 64>

2. Wenn die Zahl um mehr als die Größe der Ganzzahl verschoben wird, ist das Verhalten undefiniert. Beispielsweise ist 1 << 33 undefiniert, wenn Ganzzahlen mit 32 Bit gespeichert werden. Für Bitverschiebung größerer Werte 1ULL<<62 ULL wird für Unsigned Long Long verwendet, das mit 64 Bits definiert ist, die große Werte speichern können.

C




// c program to demonstrate the behaviour of bitwise> // shift operators for large values> #include> int> main()> {> >int> N = 3;> >// left shift of 65 digits> >printf>(>'3 << 65 = %d'>, (3 << 65));> >return> 0;> }>

>

>

C++




// c++ program to demonstrate the behaviour of bitwise> // shift operators for large values> #include> using> namespace> std;> int> main()> {> >int> N = 3;> >// left shift by 65 digits> >cout <<>'3 << 65'> << (3 << 65) << endl;> >return> 0;> }>

>

>

Ausgabe

3 << 65 = 0>

3. Die Linksverschiebung um 1 und die Rechtsverschiebung um 1 entsprechen dem Produkt aus dem ersten Term und 2 der gegebenen Potenz element(1<>3 = 1/pow(2,3)).

C




// C program for the above approach> #include> #include> int> main()> {> >printf>(>'2^5 using pow() function: %.0f '>,>pow>(2, 5));> >printf>(>'2^5 using left shift: %d '>, (1 << 5));> >return> 0;> }> // This code is contributed Prince Kumar>

>

>

C++


wie man Java aktualisiert



// C++ program to get the shifted values using pow()> #include> #include> using> namespace> std;> int> main()> {> >cout <<>'2^5 using pow() function'> <<>pow>(2, 5) << endl;> >cout <<>'2^5 using leftshift'> << (1 << 5) << endl;> >return> 0;> }>

>

>

Ausgabe

2^5 using pow() function: 32 2^5 using left shift: 32>

Muss lesen: Bitweise Operatoren in C/C++