Uma questao sobre int

O que será exibido após compilar e rodar o seguinte codigo?

public class Teste {
	public static void main(String[] args){
		int j = 017;
		int i = (byte)j >> 2;				//linha 1
		System.out.println(Integer.toBinaryString(i));	//linha 2
	}
}

() 3
() Erro de compilacao na “linha 1”
() 11
() 0

A linha:

int j = 017;

declara a variável j usando um literal int na forma octal:

017 = 7*(8^0) + 1*(8^1) = 71 + 18 = 7 + 8 = 15

A linha:

int i = (byte)j >> 2; //linha 1

usa o valor de j, 15, ou

0000 0000 0000 0000 0000 0000 0000 1111

o casting para byte é irrelevante, pois o operador binário >> converte seus operandos para pelo menos o tipo int.

deslocando os bits para a direita duas posições (>> 2) temos:

0000 0000 0000 0000 0000 0000 0000 0011

que é o valor 3 em decimal, mas que é impresso como 11 pelo método
toBinaryString, portanto a resposta é 11

:lol: Certissimo!!!

fiquem tranquilos que nao vai cair nenhum exercicio que voces precisem transformar numero binario ou octal para decimal, ou o contrario.

Os de >> e << e >>> soh precisa saber o efeito deles, que eh a multipl/divisao por 2 (elevado ao indice) se for signed.

[quote=“Paulo Silveira”]fiquem tranquilos que nao vai cair nenhum exercicio que voces precisem transformar numero binario ou octal para decimal, ou o contrario.

Os de >> e << e >>> soh precisa saber o efeito deles, que eh a multipl/divisao por 2 (elevado ao indice) se for signed.[/quote]
8) uffa!!! já tava com medo!!!

vc só nao irá passar para binary
mas todo o restante é o mesmo se trocarmos o Integer.toBinaryString(i) por i somente.