Цель-C: Как проверить число между двумя значениями - PullRequest
1 голос
/ 11 июля 2011

Схожу с ума от проблемы с супер нубом. Как проверить, находится ли между int и int два значения, т. Е. Хотите узнать, x x 100 && x> 50, которые я пробовал:

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

но без радости ??

Ответы [ 4 ]

6 голосов
/ 11 июля 2011

Если ваш компилятор не сломан, в этом коде нет ничего плохого.Возможно, что-то не так с x

. Как сказал Саша в комментариях, убедитесь, что x не является NSNumber.Причина этого в том, что если x является NSNumber, то сохраненное в нем значение является указателем, значение которого, вероятно, будет намного выше 100 (например, 0x4FBC60), и вы захотите сравнить с -(int)intValue.

Другие вещи, которые следует учитывать, сравниваются с правильными данными.Хотя неявное преобразование чисел работает хорошо, вы можете использовать такое же буквальное сравнение, что и тип данных.

unsigned long long x = 51ull;
if(x > 50ull && x < 100ull)
{

}
3 голосов
/ 17 марта 2015

OP, ваш код мне кажется нормальным.Однако, если кто-то еще прибыл сюда, задаваясь вопросом, есть ли простая функция, чтобы увидеть, находится ли число между двумя другими числами, я собираюсь предложить решение.1003 *

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

Использование будет так:

if (BETWEEN(5, 0, 10))
{
    // Do something
}
1 голос
/ 17 апреля 2015

В C, я думаю, это рано, если первое условие, второе и т. Д. (С несколькими условиями) ложно ... так что

if( 50<x && x<100 )

.. сначала проверит 50<x ... если это неверно, то пропустит проверку x<100.

Однако, есть некоторые C-подобные производные языки, которые не имеют такой расширенной проверки. Вместо этого они сначала вытягивают все bools, а затем сравнивают.

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, когда один уже ложен.

1 голос
/ 11 июля 2011
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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...