少し頭を悩ませた後、== 記号に関しては、符号付き文字と符号なし文字には驚くべき違いがあることがわかりました。
void loop()
{
}
void setup()
{
unsigned char ucA = 0x55;
unsigned char ucB = 0xAA;
unsigned char ucB_not;
char cA = 0x55;
char cB = 0xAA;
Serial.begin( 115200);
if ( ucA == ~ucB)
Serial.println( "unsigned -- match");
else
Serial.println( "unsigned -- no match");
if ( cA == ~cB)
Serial.println( "signed -- match");
else
Serial.println( "signed -- no match");
ucB_not = ~ucB;
if ( ucA == ucB_not)
Serial.println( "unsigned, seperate variable -- match");
else
Serial.println( "unsigned, seperate variable -- no match");
}
私が得る出力は次のとおりです。
unsigned -- no match
signed -- match
unsigned, seperate variable -- match
比較の前に値が拡大されるという規則はありますか? そうだとしても、署名のないケースは問題にならないはずですよね?
最後のケースを追加しました - 別の変数を作成しても問題はないようです。
私はArduinoリリース1.0.5を使用しています。