Olá. Andrei aprendendo sobre o operador & (bitwise) e estou fazendo uns testes.
Lendo sobre este descobri que a forma dele realizar a operação é da seguinte forma:
Ele irá comparar a variável da esquerda com a direta bit a bit comparando se as duas são correspondentes, irá retornar 1 caso seja.
public class Bitwise {
public static void main(String[] args) {
int a = 101;
int b = 101;
if((a & b) == 1)
{
System.out.println("1");
}
else
{
System.out.println("0");
}
}
}
Se for executado o main acima o resultado será Console: 0. Não entendo o porque está sendo zero, alguém pode explicar ?
O operador & retorna 1, de fato - mas faz isso para TODOS os bits que forem iguais a 1, e na posição exata da comparação. O número 101 em notação decimal corresponde a 1100101 em base binária. Usando notação binária, a operação (1100101 & 1100101) resulta em 1100101 (já que os argumentos são iguais). Creio que seu programa terá o resultado esperado se você fizer o seguinte:
if((a & b) == 101)
A propósito, cuidado com o trecho abaixo:
if( (010 & 101) == 1)
O argumento “010” é perigoso, já que números precedidos de zero são interpretados em base octal.