Shift izquierdo :
Denotado como: <<
Ej.: N<<i (N: primer operando, i: segundo operando)
Toma dos números, desplaza a la izquierda los bits del primer operando, el segundo operando decide el número de lugares a desplazar. O, en otras palabras, desplazar a la izquierda un número entero “ x ” con un número entero “ y ” denotado como ‘ (x<<y)’ es equivalente a multiplicar x por 2^y (2 elevado a la potencia y).
por ejemplo: tomemos N=22 ; que es 00010110 en forma binaria.
Ahora, si » N se desplaza a la izquierda por 2 «, es decir , N=N<<2 , entonces N se convertirá en N=N*(2^2) . Por lo tanto, N=22*(2^2)=88 que se puede escribir como 01011000.
C
/* C++ Program to demonstrate use of left shift operator */ #include<stdio.h> int main() { // a = 5(00000101), b = 9(00001001) unsigned char a = 5, b = 9; // The result is 00001010 printf("a<<1 = %d\n", a<<1); // The result is 00010010 printf("b<<1 = %d\n", b<<1); return 0; }
C++
/* C++ Program to demonstrate use of left shift operator */ #include <iostream> using namespace std; 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; } // This code is contributed by shivanisinghss2110
a<<1 = 10 b<<1 = 18
Giro a la derecha :
Denotado como: >>
Ej: N>>i (N: primer operando, i: segundo operando)
Toma dos números, desplaza a la derecha los bits del primer operando, el segundo operando decide el número de lugares a desplazar. En otras palabras, desplazar a la derecha un entero “ x ” con un entero “ y ” denotado como ‘ (x>>y) ‘ es equivalente a dividir x entre 2^y.
por ejemplo: tomemos N=32 ; que es 100000 en forma binaria.
Ahora, si » N se desplaza a la derecha en 2 » , es decir, N=N>>2 , entonces N se convertirá en N=N/(2^2) . Por lo tanto, N=32/(2^2)=8 que se puede escribir como 1000 .
C++
/* C++ Program to demonstrate use of right shift operator */ #include <iostream> using namespace std; int main() { // a = 5(00000101), b = 9(00001001) unsigned char a = 5, b = 9; // The result is 00000010 cout <<"a>>1 = "<< (a >> 1)<< endl; // The result is 00000100 cout <<"b>>1 = "<< (b >> 1) << endl; return 0; } // This code is contributed by shivanisinghss2110
C
/* C++ Program to demonstrate use of right shift operator */ #include <stdio.h> using namespace std; int main() { // a = 5(00000101), b = 9(00001001) unsigned char a = 5, b = 9; // The result is 00000010 printf("a>>1 = %d\n", a >> 1); // The result is 00000100 printf("b>>1 = %d\n", b >> 1); return 0; }
a>>1 = 2 b>>1 = 4
Puntos importantes :
- Los operadores de desplazamiento a la izquierda y desplazamiento a la derecha no deben usarse para números negativos. El resultado de 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.
- Si el número se desplaza más que el tamaño del entero, el comportamiento no está definido. Por ejemplo, 1 << 33 no está definido si los enteros se almacenan utilizando 32 bits. Para el desplazamiento de bits de valores más grandes, 1ULL<<62 ULL se usa para Unsigned Long Long, que se define usando 64 bits que pueden almacenar valores grandes.
- El desplazamiento a la izquierda por 1 y el desplazamiento a la derecha por 1 son equivalentes al producto del primer término y 2 al elemento potencia dado (1<<3 = 1*pow(2,3)) y la división del primer término y el segundo término elevado a la potencia 2 (1>>3 = 1/pow(2,3)) respectivamente.
Como se mencionó en el punto 1, solo funciona si los números son positivos.
C++
#include <iostream> using namespace std; int main() { int x = 19; unsigned long long y = 19; cout <<"x << 1 = " << (x << 1) << endl; cout <<"x >> 1 = " << (x >> 1) << endl; // shift y by 61 bits left cout <<"y << 61 = " << (y << 61) << endl; return 0; } // this code is contributed by shivanisinghss2110
C
#include <stdio.h> int main() { int x = 19; unsigned long long y = 19; printf("x << 1 = %d\n", x << 1); printf("x >> 1 = %d\n", x >> 1); // shift y by 61 bits left printf("y << 61 = %lld\n", y << 61); return 0; }
x << 1 = 38 x >> 1 = 9 y << 61 = 6917529027641081856
- El desplazamiento a la izquierda de 1 por i es equivalente a 2 elevado a la potencia i.
Como se mencionó en el punto 1, solo funciona si los números son positivos.
C++
#include <iostream> using namespace std; int main() { int i = 3; cout <<"pow(2, "<< i << ") = " << (1 << i) << endl; i = 4; cout <<"pow(2, "<< i << ") = " << (1 << i) << endl; return 0; } // this code is contributed by shivanisinghss2110
C
#include<stdio.h> int main() { int i = 3; printf("pow(2, %d) = %d\n", i, 1 << i); i = 4; printf("pow(2, %d) = %d\n", i, 1 << i); return 0; }
pow(2, 3) = 8 pow(2, 4) = 16