Bitwise and

1 resposta
rafaelsantini

Estou lendo o livro Java Puzzlers. No primeiro puzzle é sugerido o seguinte método para determinar se um número é impar ou não:

public static boolean isOdd(int i) { return (i & 1) != 0; }
Porém, não entendi por que (i & 1) será sempre diferente de zero caso i seja um número impar.

Tentei deduzir pela representação binária.

Exemplo 1 (número par):

00000010 = 2
&
00000001 = 1

00000000 = 0

Exemplo 2 (número impar):

00000011 = 3
&
00000001 = 1

00000001 = 1

Exemplo 3 (outro número par):

00000100 = 4
&
00000001 = 1

00000000 = 0

Exemplo 4 (outro número impar):

00000101 = 5
&
00000001 = 1

00000001 = 1

Com base nisso, posso entender que o primeiro bit de um número par será sempre igual a 0 e o primeiro bit de um número impar será igual sempre a 1?

1 Resposta

M

Isso mesmo. O bit menos significativo de um número ímpar sempre será 1 (logo, um AND a nível de bit com um retorna 1) e o bit menos significativo de um número par será sempre zero (e um AND a nível de bit com 1 retonará zero). Esse é um método mais eficaz que usar o operador de módulo (%) uma vez que esse realiza uma divisão para depois pegar o resto. E convenhamos, um AND a nível de bit é bem mais rápido de uma divisão.

Criado 18 de fevereiro de 2009
Ultima resposta 18 de fev. de 2009
Respostas 1
Participantes 2