c – 将uint8_t与数字进行比较

前端之家收集整理的这篇文章主要介绍了c – 将uint8_t与数字进行比较前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
也许我不明白C是否是编译器的错误
uint8_t a = 0x00;
uint8_t b = 0xFF;

if( a - b == 1 )
{
    doNothing();
}

doNothing不被调用(如预期的),因为(a-b)的结果在比较操作中被隐式转换为第二个操作数的类型.而对于数字,它是int int.好的.

if( a - b == (uint8_t)1 )
{
    doNothing();
}

doNothing STILL不被调用,但现在我不明白它的原因!我明确地将号码转载给uint8!

if( (uint8_t)(a - b) == 1 )
{
    doNothing();
}

现在doNothing终于被叫了,但又是为什么?如何减去两个uint8返回一个int?

编译器是用于ARM Cortex M3的uVision ARMCC.

解决方法

在a-b中,操作数在减法之前被提升为int,因此结果为-255,而不是1.

这就是为什么第一个和第二个例子都失败了它与==的其他操作数无关.第三个将-255转换回uint8_t,将其减少为模256,因此结果为预期的1.

猜你在找的C&C++相关文章