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($binario01);
$ultimo_bit substr($binario, -11);

if(
$primo_bit xor $ultimo_bitprintf("XOR vero!");
else 
printf("XOR falso!");
echo 
"
"

var_dump($primo_bit$ultimo_bit);

// che potrebbe essere equivalente a:

if($decimale == 0printf("XOR vero!");
else 
printf("XOR falso!");