Wpis z mikrobloga

spece od #arduino i #programowanie czy takie coś jest ok?

if ((a>=b && a<=c) || (digitalRead(INpin) == 0) && (sw == true)) { ... }
chciałbym aby funkcja zadziałała jeśli a jest w przedziale pomiędzy b i c, lub odczyt pinu INpin jest równy 0 ale wyłącznie gdy w każdym z tych dwóch przypadków spełniony jest dodatkowy warunek sw == true
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

i nawet tak działają:
false && false == false a 0*0=0
false && true == false a 0*1=0
true && true == true a 1*1=1
false || false == false a 0+0=0
false || true == true a 0+1=1
true || true == true a 1+1=1 (mod 2)
  • Odpowiedz
@p0mian: nie można łączyć tak operacji logicznych tzn || i && nie powinno byc koło siebie bo jest to błędy i niejednoznaczny zapis. operacje logiczne nie mają wag która jest ważniejsza i powinna zostać wykonana pierwsza. tym bardziej że przy operacji "lub" jeżeli zostaje spełniony pierwszy warunek to kolejne nie są już rozpatrywane
  • Odpowiedz
@asciiterror: chodzi o to że w takim wypadku nie rozpatrzy się && gdy pierwszy warunek zostanie spełniony. True or False and False da True bo program sprawdzi że pierwsza część "lub" jest spełniona i nie będzie się nawet zastanawiał co jest dalej
  • Odpowiedz
@p0mian: nawiasy mają największy priorytet, tak jak pisałem, to działa bardzo analogicznie do działań w matematyce
ale dochodzi jeszcze coś takiego jak "short-circuiting", tzn. w if (function_a() || function_b()) jeżeli function_a zwróci true, to function_b w ogóle nie będzie zawołane.
  • Odpowiedz
@p0mian: a z nawiasami powinno być dobrze jeżeli i ja dobrze rozumiem. (True or False) and False da False.
czyli sprawdzi czy pierwsze założenie sie zgada ale jeżeli ostatnie jest najważniejsze i bez niego nie powinno się spełnić to zwróci false.
  • Odpowiedz