logo

Operadores de desplazamiento a la izquierda y desplazamiento a la derecha en C/C++

Desplazamiento a la izquierda(<<)

Es un operador binario que toma dos números, desplaza hacia la izquierda los bits del primer operando y el segundo operando decide el número de lugares a desplazar. En otras palabras, desplazar un número entero hacia la izquierda a con un número entero b denotado como ' (un < equivale a multiplicar a con 2^b (2 elevado al poder b).

Sintaxis:



a << b;>
    a: primer operando b: segundo operando

Ejemplo: Echemos a=5 ; cual es 101 en forma binaria. Ahora si a está desplazada a la izquierda en 2 es decir a=a<<2 entonces a se convertirá a=a*(2^2) . De este modo, a=5*(2^2)=20 que se puede escribir como 10100.

función del operador de desplazamiento a la izquierda

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


cadena de entrada 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;> }>

>

>

Producción

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

Desplazamiento a la derecha(>>)

Es un operador binario que toma dos números, desplaza a la derecha los bits del primer operando y el segundo operando decide el número de lugares a desplazar. En otras palabras, desplazar un número entero a la derecha a con un número entero b denotado como ' (a>>b) 'es equivalente a dividir a por 2^b.

Sintaxis:

a>>b;>
    a: primer operando b: segundo operando

Ejemplo: echemos a=5 ; cual es 101 en forma binaria. Ahora si a está desplazada a la derecha en 2 es decir, a=a>>2 entonces a se convertirá a=a/(2^2) . De este modo, a=a/(2^2)=1 que se puede escribir como 01 .

función del operador de cambio a la derecha

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

>

>

Producción

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

Puntos importantes

1. Los operadores de desplazamiento a la izquierda y desplazamiento a la derecha no deben usarse para números negativos. El resultado es un comportamiento indefinido si alguno de los operandos es un número negativo. Por ejemplo, los resultados de 1>> -1 y 1 << -1 no están definidos.

C

lista de clasificación de java




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

>

orden sql al azar
>

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

>

>

Producción

2 <>-5 = 64>

2. Si el número se desplaza más que el tamaño del número entero, el comportamiento no está definido. Por ejemplo, 1 << 33 no está definido si los números enteros se almacenan con 32 bits. Para desplazamiento de bits de valores mayores 1ULL<<62 ULL se utiliza para Unsigned Long Long que se define utilizando 64 bits que pueden almacenar valores grandes.

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

>

>

Producción

3 << 65 = 0>

3. El desplazamiento a la izquierda en 1 y el desplazamiento a la derecha en 1 son equivalentes al producto del primer término y 2 elevado a la potencia del elemento dado (1<>3 = 1/pow(2,3)) respectivamente.

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>

tupla ordenada en Python
>

>

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

>

>

Producción

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

Debe leer: Operadores bit a bit en C/C++