Operatorji za levi in ​​desni premik v C/C++

Operatorji za levi in ​​desni premik v C/C++

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.

funkcija operaterja premika v levo

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:

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 .

desna operaterska funkcija

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;> }>

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;> }>

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++




// 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++