Como eu determinaria se um determinado número é par ou ímpar? Estou querendo descobrir isso há muito tempo e não cheguei a lugar nenhum.
128
Você pode usar o operador de módulo, mas isso pode ser lento. Se for um número inteiro, você pode fazer:
if ( (x & 1) == 0 ) { even... } else { odd... }
Isso ocorre porque o bit baixo será sempre definido em um número ímpar.
n % 2 == 0
significa semanticamenteDivide by 2 and check if the remainder is 0
, o que é muito mais claro don & 1 == 0
que isso significaZero all the bits but leave the least significant bit unchanged and check if the result is 0
. A clareza aprimorada do primeiro vale a sobrecarga (provavelmente inexistente). Isso foi o que eu quis dizer com otimização prematura. Se algo é lento e você o perfila nessa parte, mudarn % 2
paran & 1
certamente é justificado, mas fazê-lo antecipadamente não é. Em geral, trabalhar com os operadores de bit é uma má ideia antes de criar um perfil.n % 2 == 0
é mais limpa do quen & 1 == 0
.fonte
Se o restante quando você divide por 2 for 0, é par.
%
é o operador para obter um restante.fonte
(A % B)
ela mesma pode ser usada como expressão, e é aí que as coisas ficam divertidas.O operador restante,%, fornecerá o restante após a divisão por um número.
Então
n % 2 == 0
será verdade se n for par e false se n for ímpar.fonte
Todo número par é divisível por dois, independentemente de ser um decimal (mas o decimal, se presente, também deve ser par). Então você pode usar o
%
operador (módulo), que divide o número à esquerda pelo número à direita e retorna o restante ...fonte
eu recomendaria
Há uma breve explicação de como verificar se o número é ímpar. A primeira tentativa é algo semelhante ao que o @AseemYadav tentou:
mas como foi mencionado no livro:
geralmente quando temos um número ímpar negativo, em vez de
1
obter-1
o resultadoi%2
. Para que possamos usar a solução @Camilo ou simplesmente:mas geralmente a solução mais rápida é usar o operador AND como o @lucasmo write acima:
@Edit Também vale a pena apontar
Math.floorMod(int x, int y);
que lida bem com o dividendo negativo, mas também pode retornar-1
se o divisor for negativofonte
Funciona para números positivos ou negativos
fonte
O bit menos significativo (mais à direita) pode ser usado para verificar se o número é par ou ímpar. Para todos os números ímpares, o bit mais à direita é sempre 1 na representação binária.
fonte
O programa a seguir pode lidar com números grandes (número de dígitos maior que 20)
Aqui está a saída ::
fonte
Você pode usar o operador de módulo, mas isso pode ser lento. Uma maneira mais eficiente seria verificar o bit mais baixo, porque isso determina se um número é par ou ímpar. O código ficaria assim:
fonte
Você pode fazer assim:
Isso ocorre porque o Java possui em seu módulo de operação o sinal do dividendo, no lado esquerdo: n. Portanto, para dividendos negativos e positivos, o módulo tem o sinal deles.
Obviamente, a operação bit a bit é mais rápida e otimizada, basta documentar a linha de código com duas ou três palavras curtas, o que facilita a leitura.
fonte
Outra maneira fácil de fazer isso sem usar a condição if / else (funciona para números positivos e negativos):
Para um número ímpar, a expressão retornará '1' como restante, fornecendo
caso contrário, 'even' será impresso quando a expressão aparecer com o resultado '0'
fonte
int n = -3;
. Como @Camilo mencionados abaixo - quando a operação restante retornar um resultado diferente de zero, ele tem o mesmo sinal como seu operando esquerdo para generelly temosSystem.out.println(messages.get(-1));
que nos dájava.lang.ArrayIndexOutOfBoundsException
Se o módulo do número fornecido for igual a zero, o número será ainda mais ímpar. Abaixo está o método que faz isso:
fonte
fonte
Aqui está um exemplo para determinar se um determinado número é par ou ímpar,
Bem, existem muitas maneiras de determinar o mesmo. Consulte este recurso para obter mais exemplos para descobrir que o número fornecido é par ou ímpar.
fonte
Aqui está um exemplo completo: -
fonte