Ľavý Shift (<<)
Je to binárny operátor, ktorý vezme dve čísla, doľava posunie bity prvého operandu a druhý operand rozhodne o počte miest na posun. Inými slovami, posun celého čísla doľava a s celým číslom b označené ako „ (a< je ekvivalentné násobeniu a s 2^b (2 zdvihnuté na moc b).
Syntax:
a << b;>
- a: Prvý operand b: Druhý operand
Príklad: Vezmime a=5 ; ktorý je 101 v binárnej forme. Teraz, ak a je posunuté o 2 doľava t.j a=a<2 potom a bude a=a*(2^2) . teda a=5*(2^2)=20 ktoré možno napísať ako 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;> }> |
koľko je 25 zo 100
>
>
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;> }> |
>
>Výkon
a<<1 = 10 b<<1 = 18>
Pravý Shift(>>)
Je to binárny operátor, ktorý vezme dve čísla, doprava posunie bity prvého operandu a druhý operand rozhodne o počte miest na posun. Inými slovami, posun celého čísla doprava a s celým číslom b označené ako „ (a>>b) ‘ je ekvivalentné deleniu a číslom 2^b.
Syntax:
a>> b;>
- a: Prvý operand b: Druhý operand
Príklad: Vezmime a=5 ; ktorý je 101 v binárnej forme. Teraz, ak a je posunuté doprava o 2 t.j. a=a>>2 potom a bude a=a/(2^2) . teda a=a/(2^2)=1 ktoré možno napísať ako 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;> }> |
>
>Výkon
a>>1 = 2 b>>1 = 4>
Dôležité body
1. Operátory ľavého a pravého posunu by sa nemali používať pre záporné čísla. Výsledkom je nedefinované správanie, ak je niektorý z operandov záporné číslo. Napríklad výsledky 1>> -1 a 1 << -1 nie sú definované.
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;> }> |
>
>Výkon
2 <>-5 = 64>
2. Ak je číslo posunuté viac ako je veľkosť celého čísla, správanie nie je definované. Napríklad 1 << 33 nie je definované, ak sú celé čísla uložené pomocou 32 bitov. Pre bitový posun väčších hodnôt 1ULL<<62 ULL sa používa pre Unsigned Long Long, ktorý je definovaný pomocou 64 bitov, ktoré dokážu uložiť veľké hodnoty.
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++
všetky veľké písmená príkaz excel
// 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;> }> |
>
>Výkon
3 << 65 = 0>
3. Ľavý posun o 1 a pravý posun o 1 sú ekvivalentné súčinu prvého člena a 2 súčinu daného prvku (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;> }> |
>
>Výkon
2^5 using pow() function: 32 2^5 using left shift: 32>
Musíte prečítať: Bitové operátory v C/C++