<< desplazamiento a la izquierda
>> desplazamiento a la derecha
Son los mismos símbolos que utilizamos con cout y cin (para entrada y salida de datos) No confundir con ellos.
El operador de desplazamiento de bit a la derecha, como su nombre indica desplaza tantos bits como se le indique
00000100 << 2 //Desplaza 2 bits a la derecha
00010000
Este operador rellena por la derecha con ceros tantas posiciones como se le indique.
El operador de desplazamiento de bit a la izquierda, desplaza tantos bit como se le indique
00000100 >> 2 //Desplaza 2 bits a la izquierda
Daría como resultado:
00000001
Si el Lvalue no tiene signo, este operador rellena por la izquierda con ceros tantas posiciones como se indique. Si el numero de bits a desplazar es mayor que el número de bit del Lvalue, producirá un valor indefinido.
Podemos utilizar la asignación contraída en ambos casos.
a <<= n; /* sería lo mismo que */ a = a << n;
a >>= n; /* sería lo mismo que */ a = a >> n;
Eje.-
//Desplazamiento de bit a la derecha
//Sólo válido para enteros positivos de, no mas de 16 bits
//Archivo: main.cpp
#include <iostream>
#include "binario.h"
using namespace std;
int main(void)
{
int var;
Binario b;
cout<<"Introduce un valor entero positivo"<<endl;
cin>>var;
b.convertir(var);
b.mostrarBinario();
var <<= 2; //Se desplazan dos bit a la izquierda
b.convertir(var);
b.mostrarBinario();
cout<<"Valor actual de var "<<var<<endl;
return 0;
}
// ----------- CLASE BINARIO ----------- //Archivo: binario.h #ifndef BINARIO_H #define BINARIO_H
class Binario { private: int contador = 0; short int bina[15];
public: Binario(); //Constructor de clase void convertir(int);void mostrarBinario(void); }; #endif // BINARIO_H//Archivo: binario.cpp #include "binario.h" #include <iostream> Binario::Binario() { for(int i=0; i<16; i++) bina[i] = 0; //se inicializa a 0 contador = 0; }void Binario::convertir(int var) { for(int i=0; i<16; i++) bina[i] = 0; //se inicializa a 0 contador = 0; while(contador < 16){ bina[contador]=var % 2; var /= 2; contador++; } }void Binario::mostrarBinario(void) { for(int i=15; i>=0;i--) { std::cout<<bina[i]; } std::cout<<std::endl; }