No se usa el &
operador bit a bit y ( ) en binario, no lo hay. Bosquejo de la prueba:
Suponga que hay un valor k tal que x & k == x % (k + 1)
, pero k! = 2 ^ n - 1 . Entonces, si x == k , la expresión x & k
parece "operar correctamente" y el resultado es k . Ahora, considere x == ki : si hubiera bits "0" en k , hay algo de i mayor que 0, el cual ki solo puede expresarse con bits 1 en esas posiciones. (Por ejemplo, 1011 (11) debe convertirse en 0111 (7) cuando se le ha restado 100 (4), en este caso el bit 000 se convierte en 100 cuando i = 4. ) Si un bit de la expresión de k debe cambiar de cero a uno para representar ki, entonces no puede calcular correctamente x% (k + 1) , que en este caso debería ser ki , pero no hay forma de bit a bit booleano y producir ese valor dada la máscara.