Kreisās un labās maiņas operatori C/C++

Kreisās un labās maiņas operatori C/C++

Pa kreisi Shift ( < <)

Tas ir binārs operators, kas ņem divus skaitļus, pa kreisi nobīda pirmā operanda bitus, bet otrais operands nosaka vietu skaitu, kuras jāpārvieto. Citiem vārdiem sakot, vesela skaitļa maiņa pa kreisi a ar veselu skaitli b apzīmēts kā ' (a < ir līdzvērtīgs reizināšanai a ar 2^b (2 pacelti līdz jaudai b).

Sintakse:

a  < < b; 
    a: pirmais operaands b: otrais operaands

Piemērs: Ņemsim a=5 ; kurš ir 101 binārajā formā. Tagad, ja a ir nobīdīts pa kreisi par 2 t.i a=a < <2 tad a kļūs a=a*(2^2) . Tādējādi a=5*(2^2)=20 ko var uzrakstīt kā 10100.

kreisās maiņas operatora funkcija

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

Izvade

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

Pa labi Shift(>>)

Tas ir binārs operators, kas ņem divus skaitļus, nobīda pa labi pirmā operanda bitus, bet otrais operands nosaka vietu skaitu, kuras jāpārvieto. Citiem vārdiem sakot, vesela skaitļa maiņa pa labi a ar veselu skaitli b apzīmēts kā ' (a>> b) ‘ ir līdzvērtīgs a dalīšanai ar 2^b.

Sintakse:

a>> b; 
    a: pirmais operaands b: otrais operaands

Piemērs: ņemsim a=5 ; kurš ir 101 binārajā formā. Tagad, ja a ir nobīdīts pa labi ar 2 i., a=a>>2 tad a kļūs a=a/(2^2) . Tādējādi a=a/(2^2)=1 ko var uzrakstīt kā 01 .

labās maiņas operatora 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;> }>

Izvade

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

Svarīgi punkti

1. Kreisās un labās maiņas operatorus nedrīkst izmantot negatīviem skaitļiem. Rezultāts ir nenoteikta uzvedība, ja kāds no operandiem ir negatīvs skaitlis. Piemēram, gan 1>> -1, gan 1 < < -1 rezultāti nav definēti.

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

Izvade

2  <>-5 = 64 

2. Ja skaitlis tiek pārvietots vairāk par veselā skaitļa lielumu, darbība nav definēta. Piemēram, 1 < < 33 nav definēts, ja veseli skaitļi tiek saglabāti, izmantojot 32 bitus. Lielāku vērtību bitu nobīdei 1ULL < <62 ULL tiek izmantots Unsigned Long Long, kas ir definēts, izmantojot 64 bitus, kas var saglabāt lielas vērtības.

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

Izvade

3  < < 65 = 0 

3. Nobīde pa kreisi par 1 un nobīde pa labi ar 1 ir līdzvērtīga pirmā locekļa reizinājumam un 2 ar jaudas dotā elementa (1 <>3 = 1/pow(2,3)) reizinājumu.

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

Izvade

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

Vajag izlasīt: Bitu operatori C/C++