PHPでビット演算

ビット演算子があるから楽勝だと思っていたが、そうでもなかった。
if (16 & 16 == 16){...}
という文が実行されない。
しばらく悩んだりテストしたりしたあげく、
if ( intval(16 & 16) == 16 ){...}
であれば正常に動作することが分かった。暗黙のキャストに頼ったのが敗因だった訳か。
よく考えるとこれはおかしい。なぜなら、ビット演算子は基本的に整数に対する演算で(明記されていないが)結果も整数のはず。即ち「intをintにキャストしている」ことになる。やっぱりうまく動かないのが謎だな。