Обьясните if ((Status == 2)||(Status == 3)) { } и if (Status == 2||3) не одно и то же?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Обьясните if ((Status == 2)||(Status == 3)) { }  и  if (Status == 2||3)   не одно и то же?

компилируется, но второе как то не работает.. :(

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Основ вы не знаете. Может так до вас дойдет

if ((Status == 2)+(Status == 3)) { }
if (Status == 2 + 3) {}

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

да, некоторые основы прошли мимо меня, это правда, теперь  заполняю пробелы как могу.

 

так и не понял пока, меня сравнение интересует   ||   а также  &&,  еще ра з - первый вараинт он работает как и требуется по замыслу, а вот более коротки второй вараинт казалось бы тоже саое - но не работает, хотя компилируется.  Задача была - более коротко записать желаемое.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я готов объяснить, если Вы сначала объясните мне

if ((Status == 2)||(Status == 3)) { }  и  !"№;%:?*()_+  не одно и то же?

Только именно объяснтие, не просто "да" или "нет", а заодно и почему?

Пока будете объяснять, заодно поймёте и ответ на свой вопрос. И, кстати, потому же!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Short Circuit пишет:

компилируется, но второе как то не работает.. :(

Почему не работает? Работает. Делает именно то, что написано.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

мне казалось  if (Status == (2||3)) - будет тоже самое, что и первый вариант, но так и не понял, что он делает. Значит нужно указывать только так как  в моем первом варианте и никак иначе?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так Вы посмотрите опреации, чего там не понимать?

Так, стоп только собрался объснять как он работает, как обнаружил подлог. В первом посте не было скобок, которые появились в пятом.

Вы чего там лошадей на ходу меняете? Что Вам объяснять-то со скобками или без?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Status = 2||3;

и в сериал выкинуть не судьба ?

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

а я и в скобках и без них пробовал, с вторыми скобками логичнее, но всеравно по ходу там иной результат был в программе. Вот и решил здесь спросить, так как сам не разобрался.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

xDriver пишет:

Status = 2||3;

и в сериал выкинуть не судьба ?

 

хорошо, а как в сериал вот такое выкинуть:  Status = (2||3);   ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Но на вопрос "как Вам объяснять" Вы так и не рответили.

Впрочем, если бы Вы мой вопрос про !"№; восприняли не как шутку (а он ею не был), Вы бы уже сами до всего догадались.

Просто возьмите таблицу операций (я Вам давал) и выолните руками то, что в скобках под ифом - всё поймёте. Только выполняйте как написано, а не свои фантазии. Когда поймте что там получается, запустите проверочный скетч. Убедитесь, что поняли правильно.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

боюсь, я вас не до конца понял. Но если можно дать ответ на второй вопрос, он мне поможет понять мою ошибку:

 

if ((Status == 2)||(Status == 3))   и  if (Status == (2||3))   - эти варианты идентичны должны быть?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Short Circuit пишет:

xDriver пишет:

Status = 2||3;

и в сериал выкинуть не судьба ?

 

хорошо, а как в сериал вот такое выкинуть:  Status = (2||3);   ?


byte b = 0;

void setup() {
  Serial.begin(115200);
  b = 2 || 3;
  Serial.println(b);
}

void loop() {

}

вместо 2 или 3 попробуйте другие числа от 0-255

результатов будет два - 0 или 1;

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

 Операция 2||3 дает true или 1.  И последнее выражение срабатывает если Status равен истине . Что в не тоже самое как в первом выражение.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Short Circuit пишет:

боюсь, я вас не до конца понял. Но если можно дать ответ на второй вопрос, он мне поможет понять мою ошибку:

 

if ((Status == 2)||(Status == 3))   и  if (Status == (2||3))   - эти варианты идентичны должны быть?

читаю дословно

1 - если статус = 2 ИЛИ статус = 3 ....

2- если статус = логическое ИЛИ между числами 2 и 3 (которое ВСЕГДА будет равно 1) ....

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

нда...  я понял - попробовал логическим ИЛИ сравнить теплое с мягким..  так нельзя сравнивать.

Lion777
Offline
Зарегистрирован: 20.05.2016

нет, это не одно и тоже во втором варианте вы сравниваете 2 с 3 и общий результат сравниваете с Status

тип так Status == (2||3)

Lion777
Offline
Зарегистрирован: 20.05.2016

сравнение 2 или 3, 2 || 3 проверяет на истинность хотябы одного условия, 2 это true,  поэтому ваше выражение

Status == 2||3 , будет работать как  Status == 2,

Например, Status == 0||0||5, это тоже, что Status == 5

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

сравнение 2 или 3, 2 || 3 проверяет на истинность хотябы одного условия, 2 это true,  поэтому ваше выражение

Status == 2||3 , будет работать как  Status == 2,

Например, Status == 0||0||5, это тоже, что Status == 5

хм... , интересно

то есть 

Status = 2||3;      // равно двум ?
Status = 0||0||5;  // равно пяти ?

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

xDriver пишет:

Lion777 пишет:

сравнение 2 или 3, 2 || 3 проверяет на истинность хотябы одного условия, 2 это true,  поэтому ваше выражение

Status == 2||3 , будет работать как  Status == 2,

Например, Status == 0||0||5, это тоже, что Status == 5

хм... , интересно

то есть 

Status = 2||3;      // равно двум ?
Status = 0||0||5;  // равно пяти ?

 

я отвечу, о то вы наверное в вики застряли

Status == 2||3 , будет работать как  Status>0

так же как и 

Status == 0||0||5, это тоже, что Status>0

Lion777
Offline
Зарегистрирован: 20.05.2016

Согласен, с моей стороны косяк, тестировал в консоли js, но и у вас косячек

-1 == 0||5 какой результат ? 

0 == 5||3 а тут ? Явно не  > 0

Lion777
Offline
Зарегистрирован: 20.05.2016

Вот так должно работать, то что я писал ранее

2 == (2||3)

5 == (0||0||5)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вообще-то и я допустил косяк , чем и сбил весь форум. Приоритет операции || ниже == 

И if (Status == 2||3)  скорее всего будет работать так if ((Status == 2)||(3)) . То есть всегда истина .

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

Согласен, с моей стороны косяк, тестировал в консоли js, но и у вас косячек

-1 == 0||5 какой результат ? 

0 == 5||3 а тут ? Явно не  > 0

знаете мне смешно, но вы как нововыдавленый политик рассуждаете, в этом ключе (подмены понятий) и отвечу

Status = Путин и не надо в левую сторону никаких других аргументов подставлять

-1 == 0||5 какой результат ?  = Навальный.

0 == 5||3 а тут ? Явно не  > 0 = Собчак.

мы обсуждали конкретный случай, не понятный топикстартеру, вроде разобрались ...

но нет ! нам нужна пепсикола, макдак и т.д.

извините что с эронией, но формула 2+2=5, тут не нужна.

 

Lion777
Offline
Зарегистрирован: 20.05.2016

в c/c++ это не канает

5 == (0||0||5) ? "ok" : "err" ;

в js, канает )), свои особенности видать...

Lion777
Offline
Зарегистрирован: 20.05.2016

xDriver пишет:

знаете мне смешно

Угу, мне тоже смешно, какое там >0, это к чему этот бред был с вашей стороны, кого-то учит, а сам ошибается...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

в c/c++ это не канает

5 == (0||0||5) ? "ok" : "err" ;

в js, канает )), свои особенности видать...

можно попробывать еще ПИТОН, АДУ, PL ...

и другие азиатские .... ой кудаито меня понесло ))) СПАТЬ !!!

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

xDriver пишет:

знаете мне смешно

Угу, мне тоже смешно, какое там >0, это к чему этот бред был с вашей стороны, кого-то учит, а сам ошибается...

хотите глянуть на ASM листинг ? )))

Lion777
Offline
Зарегистрирован: 20.05.2016

Можно, а в чем проблема ? Автор указывал о конкретном ЯП ? Или ардуино не пишется на питоне, js ? Лучше объясните к чему это Status > 0 , это с АДУ, PL ?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Вы начинаете меня злить...

Любой, нормальный компилятор, код

Status == 2||3 

превратит не в последовальность команд сравнения с двойкой или тройкой, а выполнит преобразование правой части в соотвествии с логической операцией и потом результат сравнит со значением переменной Status.

дальше продолжать ?

Lion777
Offline
Зарегистрирован: 20.05.2016

Конечно продолжать, только начните с этого места

Status == 0||0||5, это тоже, что Status>0

---

3 == 5 || 0 || 5 ? "ok" : "err"

0 == 5 || 0 || 5 ? "ok" : "err"

-1 == 5 || 0 || 5 ? "ok" : "err"

все это true будет, к чему ваше Status>0

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ок, поехали...

опратору IF глубоко насрать что там у вас получится 5,4,3 или еще что то отличное от нуля

но я ввыше задал вопрос, после чего вы возбудились 

нуежели 

Status == 0||0||5;

равно пяти ?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

не редактируйте посты пока я пишу ответ

Lion777
Offline
Зарегистрирован: 20.05.2016

Status == 0||0||5, это тоже, что Status>0 ?

Ваше? Status>0 ?

---

Мне что, за вами следить ? )))

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

Конечно продолжать, только начните с этого места

Status == 0||0||5, это тоже, что Status>0

---

3 == 5 || 0 || 5 ? "ok" : "err"

0 == 5 || 0 || 5 ? "ok" : "err"

-1 == 5 || 0 || 5 ? "ok" : "err"

все это true будет, к чему ваше Status>0

давайте не эфорически , а кодом , который скомпилируется в Arduino IDE и будет понятен всем и топикстартеру, в том числе.

Lion777
Offline
Зарегистрирован: 20.05.2016
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(3 == 5 || 0 || 5 ? "true" : "false");
  Serial.println(-1 == 5 || 0 || 5 ? "true" : "false");
  Serial.println(0 == 5 || 0 || 5 ? "true" : "false");
  delay(5000);
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

если вы поймете разницу между 

if (Status == 0||0||5) 

и

Status = 0||0||5;

мы придем к, как там , оБЩий знамИнатель... во !!

Lion777
Offline
Зарегистрирован: 20.05.2016

Ну та вы же это мне писали

Status == 0||0||5, это тоже, что Status>0

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

https://vk.com/video169843584_170553760

Если подставить 

if (Status == 0||0||5).......

то да...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

Ну та вы же это мне писали

Status == 0||0||5, это тоже, что Status>0

этого не писал 

писал что 

Status = 0||0||5;

больше "> 0"

Lion777
Offline
Зарегистрирован: 20.05.2016

Ну вот по всякому пытаешся оскарбить, хоть и на вы, но догнать сам то не можешь

если 

Status>0 то почему, если 

Status = -1 дает true?

int Status(-1);
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(3 == 5 || 0 || 5 ? "true" : "false");
  Serial.println(Status == 5 || 0 || 5 ? "true" : "false");
  Serial.println(0 == 5 || 0 || 5 ? "true" : "false");
  delay(5000);
}

 

Lion777
Offline
Зарегистрирован: 20.05.2016

xDriver пишет:

xDriver пишет:

Lion777 пишет:

сравнение 2 или 3, 2 || 3 проверяет на истинность хотябы одного условия, 2 это true,  поэтому ваше выражение

Status == 2||3 , будет работать как  Status == 2,

Например, Status == 0||0||5, это тоже, что Status == 5

хм... , интересно

то есть 

Status = 2||3;      // равно двум ?
Status = 0||0||5;  // равно пяти ?

 

я отвечу, о то вы наверное в вики застряли

Status == 2||3 , будет работать как  Status>0

так же как и 

Status == 0||0||5, это тоже, что Status>0

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Lion777 пишет:

Ну вот по всякому пытаешся оскарбить, хоть и на вы, но догнать сам то не можешь

если 

Status>0 то почему, если 

Status = -1 дает true?

int Status(-1);
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(3 == 5 || 0 || 5 ? "true" : "false");
  Serial.println(Status == 5 || 0 || 5 ? "true" : "false");
  Serial.println(0 == 5 || 0 || 5 ? "true" : "false");
  delay(5000);
}

 

слушай уважаемый (пока) ложись спать, ты в кукрсе что объявлденый тобой int может принимать отрицательные значения отличные от нуля

это так в JS присваивают знаения перменым ? 

int Status(-1);

у меня уже , язык заплетается, и пальцы не попадают . извини .. .

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

qwone пишет:

Вообще-то и я допустил косяк , чем и сбил весь форум. Приоритет операции || ниже ==

И if (Status == 2||3)  скорее всего будет работать так if ((Status == 2)||(3)) . То есть всегда истина .

да тоже почитал,но чет мне не понятно, должно сформироваться выражение в левой и правой части, а вдруг в правой части есть тоже ==

но истина в листинге ASMa? я ща не способен)))

сегодня придет ЕвгенийП, и всех нас накажет !!!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Lion777 пишет:

Status>0 то почему, если 

Status = -1 дает true?

Патамуш, true, это все, что не 0.  -1 != 0, поэтому -1 == true. Но при выводе true преобразуеца в 1, а false в 0

А топикстартеру: 

Первое выражение

(Status==2) || (Status==3)

читается как (Статус равно 2) или (Статус равно 3)?

а второе 

(Status==2||3)

читается как Статус равно 2 или true? Так как это операция ИЛИ, то выражение всегда будет true. 

Падумай. 

Lion777
Offline
Зарегистрирован: 20.05.2016

xDriver пишет:

 

слушай уважаемый (пока) ложись спать, ты в кукрсе что объявлденый тобой int может принимать отрицательные значения отличные от нуля

О чем ты? -1 это что, не отрицательное значение отличное от 0?

xDriver пишет:

это так в JS присваивают знаения перменым ? 

int Status(-1);

это так в c/c++ присваивают значения переменным, пугает отсутствие оператора присваивания?

Lion777
Offline
Зарегистрирован: 20.05.2016

DetSimen пишет:

Lion777 пишет:

Status>0 то почему, если 

Status = -1 дает true?

Патамуш, true, это все, что не 0.  -1 != 0, поэтому -1 == true. Но при выводе true преобразуеца в 1, а false в 0

Угу, точно, почему тогда

Serial.println(0 == 5 || 0 || 5 ? "true" "false");

дает true ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

0 равно 5 или false или true == true. Нет?

Lion777
Offline
Зарегистрирован: 20.05.2016

А, я думал вы как хдрайвер, не понимая доказываете свое..

xDriver пишет:

да тоже почитал,но чет мне не понятно, должно сформироваться выражение в левой и правой части, а вдруг в правой части есть тоже ==

и в чем проблема ? для "одаренных" звезд

a == 0 || 5 || b == 10 опять true

b707
Offline
Зарегистрирован: 26.05.2017

Lion777 пишет:

и в чем проблема ? для "одаренных" звезд

a == 0 || 5 || b == 10 опять true

ты совсем туп, правда? конечно труе, а что еще должно давать это выражение?

Лион, зачем вообще вы со своими комментариями двоечника влезли в эту ветку? Почти с первого сообщения #17 почти все написанное вами в ветке - бредятина. Например вот это:

 

==== цитата

Status == 2||3 , будет работать как  Status == 2,

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707, да, ладно уж, ребята, новый год на носу, давайте к позитиву переходить.

Предлагаю выпить за анод и прекратить срач :))