Levi premik (<<)
To je binarni operator, ki vzame dve števili, premakne bite prvega operanda v levo, drugi operand pa določi število mest za premik. Z drugimi besedami, premik celega števila v levo a s celim številom b označen kot ' (a< je enakovredno množenju a z 2^b (2 dvignjeno na stopnjo b).
Sintaksa:
a << b;>
- a: Prvi operand b: Drugi operand
primer: Vzemimo a=5 ; kateri je 101 v binarni obliki. Zdaj, če a je premaknjen v levo za 2 tj a=a<<2 potem a bo a=a*(2^2) . torej a=5*(2^2)=20 kar lahko zapišemo kot 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++
// 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;> }> |
>
>Izhod
a<<1 = 10 b<<1 = 18>
Desni premik (>>)
To je binarni operator, ki sprejme dve števili, premakne bite prvega operanda desno, drugi operand pa določi število mest za premik. Z drugimi besedami, premik celega števila v desno a s celim številom b označen kot ' (a>>b) ' je enakovredno deljenju a z 2^b.
Sintaksa:
javascript operaterji
a>> b;>
- a: Prvi operand b: Drugi operand
primer: vzamemo a=5 ; kateri je 101 v binarni obliki. Zdaj, če a je premaknjeno v desno za 2 tj. a=a>>2 potem a bo a=a/(2^2) . torej a=a/(2^2)=1 kar lahko zapišemo kot 01 .
C
java pridobiva trenutni datum
// 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;> }> |
>
>Izhod
a>>1 = 2 b>>1 = 4>>
Pomembne točke
1. Operatorjev za levi in desni pomik se ne sme uporabljati za negativna števila. Rezultat je nedefinirano vedenje, če je kateri koli od operandov negativno število. Na primer, rezultati 1>> -1 in 1 << -1 so nedefinirani.
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;> }> |
>
preprosto oblikovanje datuma v Javi
>Izhod
2 <>-5 = 64>
2. Če je število premaknjeno za več kot je velikost celega števila, je vedenje nedefinirano. Na primer, 1 << 33 je nedefinirano, če so cela števila shranjena z uporabo 32 bitov. Za bitni premik večjih vrednosti 1ULL<<62 ULL se uporablja za Unsigned Long Long, ki je definiran z uporabo 64 bitov, ki lahko shranijo velike vrednosti.
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++
napaka atributa python
// 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;> }> |
>
>Izhod
3 << 65 = 0>
3. Premik v levo za 1 in premik v desno za 1 sta enakovredna zmnožku prvega člena in 2 na stopnjo danega elementa (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;> }> |
>
>Izhod
2^5 using pow() function: 32 2^5 using left shift: 32>
Morati prebrati: Bitni operaterji v C/C++