logo

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:

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 .

desna operaterska funkcija

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