Operadores shift

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

.

Operadores shift caem na SCJP 6?

Senão me engano não cai…

Abraços

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