public class BitOpers
{
public static void main( String args[] )
{
/*Uma variável byte tem capacidade para 8 bits de dados e possui um bit para
*representação de sinal. Portanto, é capaz de endereçar valores de - ( 2 ^ 7 )
*até ( 2 ^ 7 ) - 1, em números inteiros, de - 128 até 127.
*Em bits: -128 == 10000000
* +127 == 01111111
*/
System.out.println( "Valor de A = 128" );
a = (byte) -128; // 10000000
System.out.println( "Deslocando os bits de A uma posição à direita ( a>>1)" );
a = (byte) ( (byte) a>>1 ); // 11000000 - Repare que o bit de sinal é preservado
System.out.println( Integer.toString( a ) );
System.out.println( "Deslocando os bits de A mais uma posição à direita (a>>1)" );
a = ( byte ) ( (byte) a>>1 ); // 11100000
System.out.println( Integer.toString( a ) );
int b = 128;
System.out.println( "Deslocando os bits de A mais uma posição à direita, mas sem preservar o sinal" +
" a>>>1" );
a = (byte) ( (byte) a>>>1 ); // 01111000 - O número torna-se positivo?
System.out.println( Integer.toString( a ) );
}
}
Bom…isso me gera como saída:
Valor de A = 128
Deslocando os bits de A uma posição à direita ( a>>1)
-64
Deslocando os bits de A mais uma posição à direita (a>>1)
-32
Deslocando os bits de A mais uma posição à direita, mas sem preservar o sinal a>>>1
-16
Não entendi o porquê do -16.
Quando eu faço a>>>1 não deveria dar 80?
Desde já agradeço…
