c - saber - operadores de bits java



¿Cómo compruebo si un entero es par o impar usando operadores bitwise? (6)

Considere lo que significa "par" y "impar" en términos de "bit". Como los datos enteros binarios se almacenan con bits que indican múltiplos de 2, el bit de orden más bajo corresponderá a 2 0 , que es por supuesto 1, mientras que todos los otros bits corresponderán a múltiplos de 2 (2 1 = 2, 2 2). = 4, etc.). Arte ASCII gratuito:

NNNNNNNN
||||||||
|||||||+−− bit 0, value =   1 (20)
||||||+−−− bit 1, value =   2 (21)
|||||+−−−− bit 2, value =   4 (22)
||||+−−−−− bit 3, value =   8 (23)
|||+−−−−−− bit 4, value =  16 (24)
||+−−−−−−− bit 5, value =  32 (25)
|+−−−−−−−− bit 6, value =  64 (26)
+−−−−−−−−− bit 7 (highest order bit), value = 128 (27) for unsigned numbers,
                 value = -128 (-27) for signed numbers (2's complement)

Solo he mostrado 8 bits allí, pero entiendes la idea.

Así que puedes saber si un entero es par o impar mirando solo el bit de orden más bajo: si está configurado, el número es impar. Si no, es parejo. No te importan los otros bits porque todos denotan múltiplos de 2, por lo que no pueden hacer que el valor sea impar.

La forma en que se ve ese bit es utilizando el operador AND de su idioma. En C y en muchos otros idiomas derivados sintácticamente de B (sí, B), ese operador es & . En los BASICs, suele ser And Tomas tu entero, Y lo haces con 1 (que es un número con solo el bit de orden más bajo establecido), y si el resultado no es igual a 0, el bit fue establecido.

Intencionalmente no estoy dando el código aquí, no solo porque no sé qué idioma está usando, sino porque marcó la pregunta "tarea". :-)

https://code.i-harness.com

¿Cómo compruebo si un entero es par o impar usando operadores bitwise?


En C (y la mayoría de los lenguajes similares a C)

if (number & 1) {
  // It's odd 
}

Solo una nota a pie de página de la respuesta de Jim.

En C #, a diferencia de C, bitwise AND devuelve el número resultante, por lo que querría escribir:

if ((number & 1) == 1) {
   // It's odd
}

También en Java, tendrá que usar if((number&1)==1){//then odd} , porque en Java y C # como lenguajes, el int no se convierte en boolean . Tendrá que usar los operadores relacionales para devolver un valor boolean , es decir, true y false diferencia de C y C ++, como idiomas que tratan el valor no cero como true .


if (number & 1)
    number is odd
else // (number & 1) == 0
    number is even

Por ejemplo, tomemos el entero 25, que es impar. En binario 25 es 00011001 . Observe que el bit menos significativo b0 es 1.

00011001    
00000001   (00000001 is 1 in binary)
       &
--------
00000001

if(x & 1)                               // '&' is a bit-wise AND operator
    printf("%d is ODD\n", x);
else
    printf("%d is EVEN\n", x);

Ejemplos:

    For 9:

      9 ->        1 0 0 1
      1 ->     &  0 0 0 1
      -------------------
      result->    0 0 0 1

Entonces 9 Y 1 nos da 1, ya que el bit más correcto de cada número impar es 1.

     For 14:

       14 ->      1 1 1 0
       1  ->   &  0 0 0 1
       ------------------
       result->   0 0 0 0

Así que 14 Y 1 nos da 0, ya que el bit más correcto de cada número par es 0.





bitwise-operators