我一直想知道以下情况。
让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
,最后一件事就会“做事”,这不是我想要的。
答案 0 :(得分:2)
我们知道有很多A > (L_1 - L_2)
为真的值。
例如,使用L_1 == L_2
和A == UINT_MAX
。
但0 > (L_1 - L_2) - A
总是假的。由于L1
,L2
和A
是无符号操作数(L_1 - L_2) - A
是无符号表达式。无符号表达式的值始终为>= 0
。