Operadores shift

3 respostas
Diabo_Loiro

bom pessoal estou estudando e passei o dia a entender como funciona os operadores shift pois os exemplos sao escassos e as explicaçoes complexas acho que eu entendi e crei um programinha pra poder entender e disponibilizar para o pessoal…seguindo este raciocinio

[URL=http://www.turboimagehost.com/p/1611633/a.jpg.html][/URL]

funciona da seguinte maneira voce coloca um valor inteiro ou binario… e coloca um true ou false para decidir com qual trabalhar “inteiro ou binario” e a rotina vai tem mostra as operaçoes x>>2 x<<2 x>>>2 funciona esta perfeito podem rodar ele e testar com os valores positivos e negativos queria se alguem podia dar uma conferida na logica pra ver se ta certo. e queria saber como eu poderia resolver este erro que ocorre quando tento usar uma numero binario negativo muito grande no exemplo o numero -12 que representa esse numero 11111111111111111111111111110100

Exception in thread "main" java.lang.NumberFormatException: For input string: "11111111111111111111111111110100" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at Binario.main(Binario.java:17)

aki esta o codigo funcionando com positivos e negativos…
so nao funfa com negativos binarios muito grandes como o 12 obrigado…

/**
 * @author Diabo Loiro
 */

public class Binario {
	
public static void main(String args[]){
	
	int variavel=4;//variavel em questao inteira
	String numeroBinario="1000";//variavel em questao binaria
	
	Boolean trabalharComInteiro=true;//true para trabalhar com inteiros e false para binarios
	
	//rotina para trabalhar com nomero binario
	if(trabalharComInteiro==false){
		variavel=Integer.parseInt(numeroBinario,2);
		
	}
		
	int resultado;//guarda o resultado de variavel>>2
	int resultado2;//guarda o resultado de variavel<<2
	int resultado3;//guarda o resultado de variavel>>>2
	
	System.out.println("Valor da variavel em questao = "+variavel+" \n\nSeu valor em Binario = "+Integer.toBinaryString( variavel )+"\n" ); 	

	//expressoes	
	resultado=variavel>>2;
	resultado2=variavel<<2;
	resultado3=variavel>>>2;
	
	//realiza a demostraçao e verifica se eh positivo ou negativo para mudar a explicaçao	
	System.out.println("resultado de variavel >> 2 em  binario = "+ Integer.toBinaryString( resultado ) ); 
	System.out.println("resultado de variavel >> 2 em  decimal = "+resultado );
	if(variavel>=0){	
	System.out.println("Como se pode verificar sao adicionados 2 zeros a esquerda que sao omitidos pois zero a esquerda nao vale nada"+"\n");
	}else{	
	System.out.println("Como se pode verificar sao adicionados 2 zeros a esquerda E CONTINUA NEGATIVO"+"\n");
	}	
	
	//realiza a demostraçao e verifica se eh positivo ou negativo para mudar a explicaçao
	System.out.println("resultado de variavel << 2 = "+ Integer.toBinaryString( resultado2 ) );
	System.out.println("resultado de variavel << 2 em decimal = "+resultado2 );
	if(variavel>=0){	
	System.out.println("Como se pode verificar sao adicionados 2 zeros a direita"+"\n");
	}else{	
	System.out.println("Como se pode verificar sao adicionados 2 zeros a direita E CONTINUA NEGATIVO"+"\n");
	}	
	
	//realiza a demostraçao e verifica se eh positivo ou negativo para mudar a explicaçao
	System.out.println("resultado de variavel >>> 2 = "+ Integer.toBinaryString( resultado3 ) );
	System.out.println("resultado de variavel >>> 2 em decimal = "+resultado3 );
	if(variavel>=0){	
	System.out.println("Como se pode verificar sao adicionados 2 zeros a esquerda que sao omitidos pois zero a esquerda nao vale nada"+"\n");
	}else{	
	System.out.println("Como se pode verificar sao adicionados 2 zeros a esquerda E O NUMERO VIROU POSITIVO"+"\n");	
	}
		
}
}

3 Respostas

Diabo_Loiro

.

G

Operadores shift caem na SCJP 6?

Senão me engano não cai…

Abraços

Diabo_Loiro

sim sim mais eh so pra esclarecer eu queria saber de alguem mais esperiente se o raciocinio ta certo o erro e sobre o erro que da sobre numeros negativos binarios grandes eles passao dos bits no int se alguem sabia como resolver

Criado 14 de abril de 2009
Ultima resposta 15 de abr. de 2009
Respostas 3
Participantes 2