Linksverschuiving(<<)
Het is een binaire operator die twee getallen neemt, de bits van de eerste operand naar links verschuift, en de tweede operand bepaalt het aantal plaatsen dat moet worden verschoven. Met andere woorden: een geheel getal naar links verschuiven A met een geheel getal B aangeduid als ' (een< is gelijk aan vermenigvuldigen A met 2^b (2 tot de macht b).
Syntaxis:
a << b;>
- a: eerste operand b: tweede operand
Voorbeeld: Laten we nemen een=5 ; dat is 101 in binaire vorm. Nu als a is met 2 naar links verschoven d.w.z a=a<<2 Dan A zal worden een=een*(2^2) . Dus, a=5*(2^2)=20 die geschreven kan worden als 10100.
C
// 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++
np.uniek
// 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;> }> |
>
>Uitvoer
a<<1 = 10 b<<1 = 18>
Rechts verschuiven(>>)
Het is een binaire operator die twee getallen neemt, de bits van de eerste operand naar rechts verschuift, en de tweede operand bepaalt het aantal plaatsen dat moet worden verschoven. Met andere woorden: een geheel getal naar rechts verschuiven A met een geheel getal B aangeduid als ' (a>>b) ‘ is gelijk aan het delen van a door 2^b.
Syntaxis:
a>> b;>
- a: eerste operand b: tweede operand
Voorbeeld: laten we nemen een=5 ; dat is 101 in binaire vorm. Nu als a is naar rechts verschoven met 2 d.w.z. a=a>>2 Dan A zal worden a=een/(2^2) . Dus, a=een/(2^2)=1 die kan worden geschreven als 01 .
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;> }> |
>
>
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;> }> |
>
>Uitvoer
a>>1 = 2 b>>1 = 4>
Belangrijke punten
1. De links-shift- en rechts-shift-operatoren mogen niet worden gebruikt voor negatieve getallen. Het resultaat is ongedefinieerd gedrag als een van de operanden een negatief getal is. De resultaten van zowel 1>> -1 als 1 << -1 zijn bijvoorbeeld niet gedefinieerd.
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;> }> |
>
>Uitvoer
2 <>-5 = 64>
2. Als het getal meer wordt verschoven dan de grootte van het gehele getal, is het gedrag ongedefinieerd. 1 << 33 is bijvoorbeeld niet gedefinieerd als gehele getallen worden opgeslagen met 32 bits. Voor bitverschuiving van grotere waarden 1ULL<<62 VOL wordt gebruikt voor Unsigned Long Long, gedefinieerd met 64 bits die grote waarden kunnen opslaan.
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;> }> |
>
>Uitvoer
3 << 65 = 0>
3. De verschuiving naar links met 1 en de verschuiving naar rechts met 1 zijn respectievelijk equivalent aan het product van de eerste term en 2 aan het gegeven machtselement (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++
// 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;> }> |
>
>Uitvoer
2^5 using pow() function: 32 2^5 using left shift: 32>
Moet lezen: Bitsgewijze operators in C/C++