无符号值的不等式

时间:2013-07-24 09:46:13

标签: c unsigned comparison-operators inequality

我一直想知道以下情况。

L_1 > L_2为无符号值(在本例中为size_t)。 A也是同一类型。

此测试是否有效:

if( A > (L_1 - L_2) )
{
    //  do stuff
}

或等同于

if( 0 > (L_1 - L_2) - A )
{
    //  do stuff
}

if( 0 < A - (L_1 - L_2) )
{
    //  do stuff
}

简化为

if(!(A - (L_1 - L_2) ))
{
    //  do stuff
}

因为一切都是unsignedA != L_1 - L2,最后一件事就会“做事”,这不是我想要的。

1 个答案:

答案 0 :(得分:2)

我们知道有很多A > (L_1 - L_2)为真的值。 例如,使用L_1 == L_2A == UINT_MAX

0 > (L_1 - L_2) - A总是假的。由于L1L2A是无符号操作数(L_1 - L_2) - A是无符号表达式。无符号表达式的值始终为>= 0