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