式((FIO2PIN & 0x00001000)>>12)
は整数式であり、によって暗黙的にブール値にキャストされます。if(...)
ゼロはfalseで、ゼロ以外はtrueです。
コンパイラーと言語定義に関する限り、完全に明確であるという意味では、それは何も悪いことではありませんが、プログラマーの意図を明確にするために、条件ステートメントでは明示的にブール式のみを使用することを好みます。これは、結果を明示的にゼロと比較することで簡単に実行できます。この場合:
if( ((FIO2PIN & 0x00001000) >> 12) != 0 )
ただし、ゼロ以外の値は真として受け入れられるため、どちらの場合もシフトはまったく不要です(そのため、常にゼロと比較するか、まったく比較しないでください)。そう:
if( FIO2PIN & 0x00001000 )
また
if( (FIO2PIN & 0x00001000) != 0 )
も同様に有効です - 後者が私の好みです。
前述のように、ゼロ以外の値は真として受け入れられますが、ゼロのみが偽であるため、x
は整数式であり、テストx == 1
は危険なものであり、x != 0
代わりに使用する必要があります。