Non capisco la ragione di tutti quei passaggi.
mi rifaccio alla tua prima affermazione:
Durante una funzione, converto in binario un numero decimale con decbin e poi prendo il primo e l'ultimo bit.
Gia' da questo assunto hai che il primo bit sara' sempre 1 a meno che il numero da convertire sia 0 il che non avrebbe senso (essere a 0 da convertire). Altro assunto: se il primo ed ultimo bit sono entrambi = 1 il numero e' dispari (e XOR = FALSE) invece se il primo ed ultimo bit fossero diversi primo = 1 ultimo = 0 il numero sarebbe pari (XOR = TRUE).
In ogni caso non avrai mai la condizione con decbin() di avere un 0 XOR 1. Ma solo 1 XOR 0 (TRUE) e 1 XOR 1 (FALSE). Prova:
Codice PHP:
$decimale = 1214; // il numero che vuoi
echo $binario = decbin($decimale);
echo "
";
$primo_bit = substr($binario, 0, 1);
$ultimo_bit = substr($binario, -1, 1);
if($primo_bit xor $ultimo_bit) printf("XOR vero!");
else printf("XOR falso!");
echo "
";
var_dump($primo_bit, $ultimo_bit);
// che potrebbe essere equivalente a:
if($decimale % 2 == 0) printf("XOR vero!");
else printf("XOR falso!");