Dúvida sobre ops. lógicas

Estou estudando o livro de Core Java 2 do Cornell.
Gostaria de saber o sentido do código abaixo:

int x;
int y = (x & 8) / 8;

E caso os senhores possam me responder, qual o sentido deste outro código, também sobre operadores lógicos bit a bit:

int x;
int y = (x & (1 << 3)) >> 3;

No primeiro caso você deveria ter um erro de compilação, pois x não está inicializado.

Mas se x estivesse inicializado você estaria pegando o quarto bit da direita para a esquerda de x (considerando seu valor binário) e movendo (shift) à direita (divisão por 8 tem o mesmo sentido binário de mover o número 3 casas à direita, visto que 8 == 2^3, o equivalente a fazer: x >> 3).

Exemplo:

   int x = 8; // == (00001000 em binário) (na verdade acho que tem mais 24 zeros à esquerda, mas vamos considerar só o byte significativo)
   int y = (x & 8) / 8; // == 1

Passo a passo:
x & 8 = 00001000 (em binário)
(x & 8) / 8 = 00000001

No segundo caso, considerando x inicializado com 8 somente para testes, temos

   int x = 8; // 00001000 em binário
   int y = (x & (1 << 3)) >> 3; // == 1

Você fez a mesma operação, só que com operadores diferentes, operadores bit a bit de shift à esquerda e shift à direita (<< e >>).

Passo a passo:
1 << 3 => 00001000 (em binário) => 8 (em decimal)
x & (1<<3) => x & 8 => 00001000 => 8
(x & (1 << 3)) >> 3 => x & 8 >>3 => 8 >> 3 => 00001000 >> 3 => 00000001 == 1

Desculpe a minha santa ignorancia, mas vc poderia me dizer um exemplo prático do porque fazer as coisas deste jeito?

Ainda não consegui entender pra q mover casas de bits, etc…
[]'s

Não sei se em Java a coisa funciona desse jeito, já que é a máquina virtual que faz tudo, mas esse tipo de opereção é feita freqüentemente em C/C++ quando se quer aumentar o desempenho.

Fazer deslocamento de bits é bem mais rápido do que fazer a divisão/multiplicação equivalente. Se bem que os compiladores atuais devem ser espertos o suficiente para transformar [b]x/2[/b] em [b]x &gt;&gt; 1[/b] na hora de gerar o código binário... Mas que deslocamento de bits é mais rápido é :) .

Outra razão para a existência dos operadores bit a bit é a necessidade de certos aplicativos de manipulá-los (os bits) diretamente. Por exemplo, imagine que você vai implementar um compactador, digamos seguindo o código de <a href="http://en.wikipedia.org/wiki/Huffman_coding">Huffman</a>, você vai precisar manipular diretamente os bits.