Não usando o &
operador bit a bit-and ( ) em binário, não há. Esboço da prova:
Suponha que houvesse um valor k tal que x & k == x % (k + 1)
, mas k! = 2 ^ n - 1 . Então, se x == k , a expressão x & k
parece "operar corretamente" e o resultado é k . Agora, considere x == ki : se houvesse algum bit "0" em k , há algum i maior que 0, o qual ki só pode ser expresso com bits 1 nessas posições. (Por exemplo, 1011 (11) deve se tornar 0111 (7) quando 100 (4) foi subtraído dele, neste caso o bit 000 torna-se 100 quando i = 4. ) Se um bit da expressão de k deve mudar de zero para um para representar ki, então ele não pode calcular corretamente x% (k + 1) , que neste caso deveria ser ki , mas não há como o booleano bit a bit e produzir esse valor dada a máscara.