C の落とし穴

 C に限らないかもしれませんが、

例えば、あるレジスターのCHAR型のデータ(P1DR)を取ってきて、その8ビットデータの内の0ビット目を取り出して、それが0か1かを判定したいとしよう

方法はいろいろあると思うけれど、例えばこんな感じにしてしまったら

if( P1DR & 0x01 == 1 )
これは、間違い!
&は、==よりも優先順位が低いため、0x01 == 1 の方が先に演算され、その結果とP1DRがビット論理和されてしまう。

正しくは、カッコを付けて
if(  (P1DR & 0x01) == 1  )

カッコをつけずにキレイに書きたいと思ってやりすぎると落とし穴にはまることがありそう。
あやしい時は、カッコをつけよう!