Objective-C:如何检查两个值之间的数字

时间:2011-07-11 13:58:21

标签: objective-c

这里有一个超级noob问题。如何检查if和int是否在两个值之间,即想要查看x <100&amp;&amp; x> 50我试过:

if(x<100 && x>50){
 ..
}

但没有任何快乐?

4 个答案:

答案 0 :(得分:6)

除非您的编译器坏了,否则该代码没有任何问题。 x

可能有问题

正如Sascha在评论中所说,确保x不是NSNumber。原因是如果xNSNumber,那么存储在其中的值是一个指针,该值可能远高于100(例如0x4FBC60)并且您希望与{进行比较{1}}。

需要考虑的其他事项是与正确的数据进行比较。虽然隐式数字转换效果很好,但您可能希望使用与数据类型相同的文字比较。

-(int)intValue

答案 1 :(得分:3)

OP,你的代码对我来说似乎很好。但是,如果有其他人到这里想知道是否有一个简单的功能来查看一个数字是否在两个其他数字之间,那么我将提出一个解决方案。

可以使用#define:

#define BETWEEN(value, min, max) (value < max && value > min)

用法如下:

if (BETWEEN(5, 0, 10))
{
    // Do something
}

答案 2 :(得分:1)

int x = 66;
if(x>50 && x<100){
  // do what you need here
}

NSNumber *x = @66;
if([x intValue]>50 && [x intValue]<100){
  // do what you need here
}

答案 3 :(得分:1)

在C中,我认为如果第一个条件,第二个等(具有多个条件)是假的,那么它会提早删除...所以

if( 50<x && x<100 )

..首先检查50<x ...如果这是假的,那么它将跳过x<100检查。

然而,有一些类似C的衍生语言没有这种高级检查。相反,他们首先拉出所有的bool,然后进行比较。

EG:我一直在使用HLSL(高级着色器语言)为Direct X进行一些编码。如果早期条件是假的,它不会短路;它喜欢检查每一个,然后决定。所以......

if (50<x && x<100)

...对两个部分进行评估,然后如果其中任何一个为假,则继续进行评估。由于所有部件都得到了评估,我最终还是选择......

if( 50 < x < 100)

如果你想在这些情况下保持肛门,你可以通过分支来代码膨胀......

if (50 < x)
{
  if (x < 100)
  {do A}
  else
  {do B}
}
else
{do B}

这是更多的代码,但是它迫使HLSL编译器一次一个地删除决策,而不是浪费时间评估所有bool时已经错误。