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
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

винаги е отляво надясно... и винаги проверява първия и ако е true  връща него. но трябва да има условие ти така както си го написал  ти  ги връща съвсем нормално. Това са логически операции незнам защо си мислиш че манипулираш редовете по някакъв начин. Компилатора започва да чете кода и проверява редовете един по един и връща каквото е прочел....

Май по-скоро не си разбрал какво е bool и какво прави...

0
Ivelin91 avatar Ivelin91 0 Точки

https://imgur.com/a/b4moN

При първият  пример започваме да проверяваме отляво надясно (както спомена) всяка двойка и излиза, че накрая отговорът ще ни е "false", но Visual Studio връща "true". 
Но ако проследим двойките отдясно наляво, тогава резултатът ще ни е "true", както си ни го връща и програмата.

Затова и не мога да си обясня защо така се получава след като правилото е "винаги отляво надясно".

 

0
13/01/2018 11:33:42
simeon3000 avatar simeon3000 264 Точки

На картинката, която си дал, си изпуснал приоритета на && преди  ||, но всъщност дотам въобще не се стига.

Когато имаме логическо "или", компилаторът почва проверките отляво надясно, НО до първото срещнато true. Щом види true, последвано от ||, спира да гледа нататък и връща true.

 

(true || false) връща true, (false || true) също връща true. Затова, ако нещо е по-вероятно да върне true, го слагаме отляво, за да спестим проверки.

 

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