3

我一直想知道以下情况。

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
}

既然一切都是unsigned。最后一件事会尽快“做事” A != L_1 - L2,这不是我想要的。

4

1 回答 1

2

我们知道有很多价值观A > (L_1 - L_2)是正确的。例如,使用L_1 == L_2A == UINT_MAX

0 > (L_1 - L_2) - A总是假的。AsL1和are unsigned 操作数L2是一个无符号表达式。无符号表达式的值始终为。A(L_1 - L_2) - A>= 0

于 2013-07-24T10:11:12.607 回答