或许我没有正确理解C++,或者这是编译器的一个错误?
uint8_t a = 0x00;
uint8_t b = 0xFF;
if( a - b == 1 )
{
doNothing();
}
doNothing 没有被调用(正如预期),因为 (a-b) 的结果被隐式转换为比较操作中第二个操作数的类型。对于数字,它是带符号整数。好的。
if( a - b == (uint8_t)1 )
{
doNothing();
}
doNothing仍然没有被调用,但我现在不理解原因!我已经将数字显式转换为uint8了!
if( (uint8_t)(a - b) == 1 )
{
doNothing();
}
现在doNothing终于被调用了,但为什么呢?为什么两个uint8的相减会返回一个int呢?
编译器是ARM Cortex M3的uVision ARMCC。