Loading...
Ivelin91 avatar Ivelin91 0 Точки

Последователност на изпълняване на логическите оператори?

Здравейте,

Искам да ви попитам каква е последователността при изпълняване на логическите опрератори, когато имаме повече от 2.

До колкото знам се сравняват по двойки и резултатът от изпълнението на първата двойка се сравнява със следващия, след това този резултат се сравнява със следващия и т.н. Но откъде започва сравнението и реда на изпълнение - отляво-надясно или отдясно-наляво?

Отдолу имам 2 примера, в които се опитах да тествам това във Visual Studio, за да се уверя от само себе си - но това доведе до повече объркване.

Пример 1 :

bool result = true || false || true && false;      // true 

bool resultLeft = ((true || false) || true) && false;    // false
bool resultRight = true || (false || (true && false));  // true
 

Този пример връща еднакъв резултат, при реда, в който изкуствено е манипулирано със скоби първоначално да се изпълняват операциите отдясно-наляво.

 

Пример 2:

bool result = false && false || true && false || true && false || true || true;              // true

bool resultLeft = ((((((false && false) || true) && false) || true) && false) || true) || true;   // true
bool resultRight = false && (false || (true && (false || (true && (false || (true || true))))));  // false

Този пример връща еднакъв резултат, при реда, в който изкуствено е манипулирано със скоби първоначално да се изпълняват операциите отляво-надясно.

 

Какво е правилото и къде бъркам?

 

2ри Въпрос:  при сравняване на bool стойности с  "|" и "&" (побитови логически операции) винаги ли връща еднаква стойност, както при сравняването със съответно "||" и "&&". 
 

0
Programming Basics 13/01/2018 11:17:31
KeepCoding avatar KeepCoding 554 Точки
Best Answer

Виж частта, където пише "Приоритет на операторите в C#"

https://www.introprogramming.info/intro-csharp-book/read-online/glava3-operatori-i-izrazi/#_Toc298863965

Там "&&" е с по-висок приоритет от "||". Малко по-нависоко в таблицата пише същото и за операторите за аритметични операции. Представи си че "&&" е като умножение (като приоритет), а "||" е като събиране. Като пример да видим първата ти операция:

bool result = true || false || true && false; което ако можем да го отъждествим като аритметична операция би изглеждало така: 

резултат = число1 + число2 + число3 * число4. Естествено първата операция, която ще се изпълни ще бъде число3 * число4. И обратно към кодът - първата операция, която ще се изпълни ще бъде "true && false". Ако има операции с един и същ приоритет на изпълнение, се изпълняват от ляво надясно (както и е при аритметичните операции). Т.е. след като бъдат изпълнени всички "&&" оператори (от ляво надясно) започват да се изпълняват всички "||" оператори от ляво надясно. И отново както при аритметичните операции, и при логическите операции скобите променят приоритета. Мен лично ме мързи да помня приоритетът на логическите оператори и ползвам скоби.

0
Ivelin91 avatar Ivelin91 0 Точки

Благодаря много за отличното обяснение! 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.