non vorrei dire na sciocchezza

ma base_convert restituisce una stringa. Quindi tu poi fai l'or su due stringhe e non su due byte

E poi perche' converti da base 16 a base due?

Al limite dovresti fare

$b = base_convert (7, 10, 2);

prova qualcosa del genere.

$test = 37|7;
echo base_convert ($test, 10, 2);