logo

Operatori Shift sinistro e Shift destro in C/C++

Maiusc a sinistra(<<)

È un operatore binario che accetta due numeri, sposta a sinistra i bit del primo operando e il secondo operando decide il numero di posizioni da spostare. In altre parole, spostamento a sinistra di un numero intero UN con un numero intero B indicato come ' (un< equivale a moltiplicare UN con 2^b (2 elevati alla potenza b).

Sintassi:



a << b;>
    a: Primo operando b: Secondo operando

Esempio: Prendiamo a=5 ; che è 101 in forma binaria. Ora se a è spostato a sinistra di 2 i.e a=a<<2 Poi UN diventerà a=a*(2^2) . Così, a=5*(2^2)=20 che può essere scritto come 10100.

funzione dell'operatore di spostamento a sinistra

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




cos'è l'espressione regolare Java
// 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;> }>

>

>

Produzione

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

Maiusc destra(>>)

È un operatore binario che accetta due numeri, sposta a destra i bit del primo operando e il secondo operando decide il numero di posizioni da spostare. In altre parole, spostamento a destra di un numero intero UN con un numero intero B indicato come ' (a>>b) ‘ equivale a dividere a con 2^b.

Sintassi:

a>>b;>
    a: Primo operando b: Secondo operando

Esempio: prendiamo a=5 ; che è 101 in forma binaria. Ora se a è spostato a destra di 2 cioè a=a>>2 Poi UN diventerà un=un/(2^2) . Così, a=a/(2^2)=1 che può essere scritto come 01 .

funzione dell'operatore di spostamento a destra

C

non uguale a mysql




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

>

elenco dei programmi Python

>

Produzione

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

Punti importanti

1. Gli operatori di spostamento a sinistra e di spostamento a destra non devono essere utilizzati per i numeri negativi. Il risultato di è un comportamento indefinito se uno qualsiasi degli operandi è un numero negativo. Ad esempio, i risultati di 1>> -1 e 1 << -1 non sono definiti.

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

>

>

Produzione

2 <>-5 = 64>

2. Se il numero viene spostato più della dimensione del numero intero, il comportamento non è definito. Ad esempio, 1 << 33 non è definito se i numeri interi vengono memorizzati utilizzando 32 bit. Per lo spostamento di bit di valori maggiori 1ULL<<62 ULL viene utilizzato per Unsigned Long Long che è definito utilizzando 64 bit in grado di memorizzare valori di grandi dimensioni.

C

generici Java




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

>

>

la rotella di scorrimento non funziona
Produzione

3 << 65 = 0>

3. Lo spostamento a sinistra di 1 e lo spostamento a destra di 1 equivalgono rispettivamente al prodotto del primo termine e di 2 all'elemento dato dalla potenza (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;> }>

>

>

Produzione

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

Devi leggere: Operatori bit a bit in C/C++