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、常に偽です。As L1L2and Aare unsigned operands(L_1 - L_2) - Aは符号なし式です。符号なし式の値は常に>= 0です。

于 2013-07-24T10:11:12.607 に答える