经过一番摸索,我确定有符号和无符号字符在 == 符号方面存在惊人的差异。
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。