0

if (row > -1 && row < _rows)書く代わりに、に短縮できるかどうかを確認したかったのif (-1 < row < _rows)です。以下のテストを使用して確認しました (コンパイル エラーは返されませんでした)。

int x = 5;
BOOL test1 = NO;
BOOL test2 = NO;
BOOL test3 = NO;

if (x < 6 && x > 4) {
    test1 = YES;
}
if (4 < x < 6) {
    test2 = YES;
}
if (5 < x < 7) {
    test3 = YES;
}

YES私の構文が正しければ、3番目のテストを含め、3つのテストすべてが発生しましたNO(5 < 5 < 7)これは有効な構文ではないように見えますが、私の質問は、構文が true を返すところでコンパイラは実際に何をしているのかということです。

4

2 に答える 2

3

5 < x7 未満の 0 にキャストされる false を返すためだと思います。

于 2013-01-05T04:23:15.500 に答える
0

論理 and 演算子をまったく使用しないようにするには、次のようにします。

5 < x == 1 == (x < 7)

これは 1 == 1 == 1 と評価され、これは 1 == 1 であり、真の値です。コンパイラが左から右に読み取る方法のために、括弧が必要です。

于 2013-01-05T04:31:53.153 に答える