Условное утверждение в Objective C с двумя операторами сравнения в одном предложении - PullRequest
4 голосов
/ 22 февраля 2012

В последнее время я изучал Objective C и наткнулся на некоторый код для использования акселерометра в приложении для iPhone.Работает отлично;однако в коде есть одно if-утверждение, которое я просто не могу понять (и смысл, и почему он работает).Конкретный фрагмент таков:

if (0.2f < deviceTilt.y > -0.2f){position.x = 0;}

Я просто не могу понять условие, и раньше я не видел использования двух операторов сравнения в одном предложении.

Надеюськто-нибудь может мне помочь!

PS: Весь проект можно найти по этой ссылке: http://www.ifans.com/forums/showthread.php?t=151394

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Это оценивается как:

пусть y := .1

if ((.2 < y) > -.2)

if (false > -.2)

false обрабатывается как int

if (0 > -.2)

if (true)

let y := .3

if ((.2 < y) > -.2)

if (true > -.2)

true трактуется как int

if (1 > -.2)

if (true)

-> всегда верно


скорее всего, это имелось в виду:

if ((.2 < y) && (y > -.2))
2 голосов
/ 22 февраля 2012

Это, конечно, нетипично, и большинству людей это не понравится. Чтобы действительно понять, что происходит, вы должны понимать приоритет оператора Си. Смотри: http://www.swansontec.com/sopc.html.

Давайте проанализируем утверждение, зная, что условные выражения связывают слева направо:

1) 0,2f

2) Результат (1)> -0.2f. Что всегда должно быть правдой.

Так что это то же самое, как если бы (1) или всегда верно

...