<< e >>

Olá pessoal!!

Estou analisando um codigo de um simulador de rede (j-Sim) e me deparei com o seguinte codigo:

static final int FLAG_DEBUG_LEVEL_START               = 16;
	/** Bit mask of the enabled flag. */
	public static final int FLAG_ENABLED                  = 1 << 0;
	/** Bit mask of the enabled flag. */
	public static final int FLAG_ERROR_ENABLED            = 1 << 1;
	public static final int FLAG_GARBAGE_ENABLED          = 1 << 2;
	public static final int FLAG_GARBAGE_DISPLAY_ENABLED  = 1 << 3;
	public static final int FLAG_DEBUG_ENABLED            = 1 << 4;
	public static final int FLAG_TRACE_ENABLED            = 1 << 5;
	public static final int FLAG_EVENT_ENABLED            = 1 << 6;
	public static final int FLAG_COMPONENT_NOTIFICATION   = 1 << 7;
	public static final int FLAG_PORT_NOTIFICATION        = 1 << 8;
	public static final int FLAG_DIRECT_OUTPUT_ENABLED    = 1 << 9;
	public static final int FLAG_STARTED                  = 1 << 10;
	public static final int FLAG_STOPPED                  = 1 << 11;
	//public static final int FLAG_EXPOSED                  = 1 << 12;
	//public static final int FLAG_HAS_EXPOSED_CHILD        = 1 << 13;
	static final int FLAG_OMIT_DUPLICATE             = 1 << 14;

Nunca vi “<<” ou “>>”…

Alguém poderia me dizer pra que serve?? Ou me indicar algum lugar pra que eu poça estudar o assunto?

Grato!

Roni Lenhardt

Boas, << >>(e >>>) são operadores que permitem fazer o deslocamento de bits. << é um deslocamento para a esquerda, >> para a direita e >>> para a direita mas com a atribuição de zeros.

O que os shifts(ou deslocamentos) fazem é pegar na representação binária de um número e deslocar-le todos os bits uma ou mais posições para a direita ou para a esquerda (conforme o sentido do operador). Dando um pequeno exemplo:

Tens um número qualquer cuja sua representação binária é 0011, fazendo um shift à esquerda ele ficaria 0110. Atenção que este exemplo é muito básico, mas explica teoricamente como fundionam estes operadores.

A sintaxe:


int i =5;
i = i << 1; // sofre UM deslocamento á esquerda

int a = 4
a = a >> 3 // Sofre TRÊS deslocamentos á direita

Repara que o número que está depois do operador shift corresponde ao número de posições que cada bit se desloca. Se tem um número X á frente do operador >> quer dizer que os bits correspondentes ao número em questão irão deslocar-se X posições para a direita.

Espero que isto te tenha ajudado :wink:

Ótimo! Entendi perfeitamente!

Mas e na prática?? Não consigo imaginar uma situação em que seja util usar isso… alguém pode me dar uma luz???

Roni Lenhardt

O que isso ai na pratica faz (vc vai ver qdo fizer as operações nos bit) é dividir ou multiplicar o numero por 2 para cada vez que vc desloca o bit dele.

Ex:
10>1 = 5
20 >> 2 = 5
512 >> 5 = 16
2 << 4 = 32
10 << 3 = 80

etc

Fazer isso é muito mais rapido que fazer: numero * 2 ou numero / 2, pois a operação é realizada nos bits, hoje com os computadores que temos, na maioria das vezes naum eh util (vc naum vai fazer isso num sisteminha de controle de estoque basico por exemplo), ja que o ganho de performasse eh insignificante para poucas operações, mas para programas matematicos que fazem trilhões de continhas, onde eles puderem colocar isso, vaum colocar, pois o ganho de performasse para as trilhoes pode ser mais significativo. Outro lugar são dispositivos moveis (celular, palm), sistemas embarcados, ou seja, onde a seu processamente é limitado.