if语句中的多个运算符,不带AND或OR

时间:2013-01-05 04:21:47

标签: objective-c syntax if-statement operators

我想看看,我是否可以将其缩短为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,包括第三个测试,如果我的语法正确,那应该是NO。看起来这不是有效的语法,但我的问题是,编译器在语法(5 < 5 < 7)返回true的情况下实际做了什么?

2 个答案:

答案 0 :(得分:3)

我认为这是因为5 < x返回false,它会转换为0,小于7。

答案 1 :(得分:0)

如果你想让它根本不使用逻辑和运算符,这应该有效:

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

这评估为1 == 1 == 1,即1 == 1,这是一个真值。由于编译器如何从左向右读取,因此需要括号。