C++ を正しく理解していないのでしょうか、それともコンパイラのバグでしょうか?
uint8_t a = 0x00;
uint8_t b = 0xFF;
if( a - b == 1 )
{
doNothing();
}
(ab) の結果が比較演算で第 2 オペランドの型に暗黙的にキャストされたため、doNothing は (予想どおり) 呼び出されません。数値の場合は、signed int です。わかった。
if( a - b == (uint8_t)1 )
{
doNothing();
}
doNothing はまだ呼び出されていませんが、その理由がわかりません! 数値を明示的に uint8 にキャストしました!
if( (uint8_t)(a - b) == 1 )
{
doNothing();
}
doNothing が最終的に呼び出されるようになりましたが、これもなぜでしょうか? 2つのuint8の減算はどのようにintを返すことができますか?
コンパイラは、ARM Cortex M3 用の uVision ARMCC です。