logo

Vänsterväxlings- och högerväxlingsoperatörer i C/C++

Vänster skift(<<)

Det är en binär operator som tar två tal, vänster skiftar bitarna i den första operanden och den andra operanden bestämmer antalet platser som ska skiftas. Med andra ord, vänsterförskjutning av ett heltal a med ett heltal b betecknas som ' (a< motsvarar att multiplicera a med 2^b (2 höjs till effekt b).

Syntax:



a << b;>
    a: Första Operand b: Andra Operand

Exempel: Låt oss ta a=5 ; vilket är 101 i binär form. Nu om a är vänsterförskjutet med 2 dvs a=a<<2 sedan a kommer att bli a=a*(2^2) . Således, a=5*(2^2)=20 som kan skrivas som 10100.

vänsterväxlingsförarfunktion

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

>

>

Produktion

a<<1 = 10 b<<1 = 18>

Höger skift(>>)

Det är en binär operator som tar två tal, högerskiftar bitarna i den första operanden och den andra operanden bestämmer antalet platser som ska skiftas. Med andra ord, högerförskjutning av ett heltal a med ett heltal b betecknas som ' (a>>b) ’ motsvarar att dividera a med 2^b.

Syntax:

a>> b;>
    a: Första Operand b: Andra Operand

Exempel: låt oss ta a=5 ; vilket är 101 i binär form. Nu om a är högerförskjutet med 2 dvs a=a>>2 sedan a kommer att bli a=a/(2^2) . Således, a=a/(2^2)=1 som kan skrivas som 01 .

högerväxlingsförarfunktion

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

>

>

Produktion

a>>1 = 2 b>>1 = 4>

Viktiga punkter

1. Operatörerna för vänsterskift och högerskift bör inte användas för negativa tal. Resultatet av är odefinierat beteende om någon av operanderna är ett negativt tal. Till exempel är resultat av både 1>> -1 och 1 << -1 odefinierat.

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

>

>

Produktion

2 <>-5 = 64>

2. Om talet förskjuts mer än heltalets storlek är beteendet odefinierat. Till exempel är 1 << 33 odefinierat om heltal lagras med 32 bitar. För bitförskjutning av större värden 1ULL<<62 ULL används för Unsigned Long Long som definieras med 64 bitar som kan lagra stora värden.

C

strängarray i c-språk




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

>

>

Produktion

3 << 65 = 0>

3. Vänsterförskjutningen med 1 och högerförskjutningen med 1 är ekvivalenta med produkten av den första termen och 2 till det givna kraftelementet (1<>3 = 1/pow(2,3)) respektive.

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

>

>

Produktion

2^5 using pow() function: 32 2^5 using left shift: 32>

Måste läsas: Bitwise Operators i C/C++