Dijuna
#programowanie #cpp

bool b = ((_a && !a_) ^ (_y && !y_) ^ (_n && !n_));
Czy to zadziała tak, że jeżeli którakolwiek z par jest prawdziwa, ale prawdziwa jest tylko jedna z nich, b będzie równe 1, a w dowolnej innej sytuacji będzie równe 0?
  • Najlepsze
  • Wszystkie komentarze
pkh
pkh
2
@encoreleet: tam jest a_ ;) @Dijuna: masz tutaj xor, wiec nie mozesz miec dwóch true. Albo 1 albo 3 ;d
A.....k
A.....k
@Dijuna: Nie. A nie możesz tych warunków dodać? Wtedy jesli wyjdzie 1 to jeden warunek jest spełniony, w przeciwnym razie nie wyjdzie 1 tylko 0 lub 2 lub 3.
Kaczus2B
Kaczus2B
@encoreleet: tam jest _a oraz a_ czyli takie a1 oraz a2.
s.....r
s.....r
@Dijuna:

bool b = true;

b &= (a && !a);
b
lionbest
@pkh: Tylko nieparzysta liczba true daje true na wyjściu czyli dla zera jest to false.
@Dijuna: Wszyscy jakoś się tak zamieszali, a odpowiedz jest prosta, nie, musisz je dodać do siebie:

bool b = ((_a && !a_) + (_y && !y_) + (_n && !n_)) == 1;
lionbest
@Blitzkrung: Zgodnie z tym co powiedział @Dijuna b ma być true wtedy i tylko wtedy gdy jedna koniunkcja będzie miała wartość true, true domyślnie rzutuje się na inta jako 1 czyli zliczasz te jedynki, i sprawdzasz czy masz jedną.
lionbest
@Dijuna: Nie myślałeś ale korzystałeś, operator^ nie jest zdefiniowany dla typu bool i daje w rezultacie zwykłego inta. Dlatego można się łatwo złapać jak się robi xor z jakąś wartością która nie jest boolem.
lionbest
@Dijuna: LOL Nie oto chodziło, twój przykład niema żadnego sensu bo int na bool się też domyślnie rzutuje, ten static tam nie jest do niczego potrzebny.
Chodziło oto że:

bool a=1, b=0;
int c = maska & liczba; //sprawdzamy bitowo czy jakies bity sa ustawione, ale zapominamy o bool i wstawiamy inta
bool r= a ^ b ^ c;

// i jak nie wiesz że c to nie bool to
encoreleet
@Dijuna: to nie ma sensu bo

a && !a


zawsze bedzie falszem, bo to bedzie 0&&1 lub 1&&0 wiec b bedzie mialo wartosc 0^0^0 wiec bedzie true
pkh
pkh
0
@Dijuna: Chodzi mi o to ze jak bedziesz miec true ^ true ^ true to w sumie bedziesz miec true, ale false ^ false ^ false tez da true ;D
Dijuna
Dijuna Autor
0
@Analityk: @skiter: dziękuję. :3
A z ciekawości: dałoby się to zrobić na samej logice? Tzn. żeby nie było długim zdaniem w rodzaju wymieniania wszystkich opcji...
Dijuna
Dijuna Autor
0
@encoreleet:
_y - zapoczątkowano głosowanie na tak, y_ - zakończono głosowanie na tak. Jestem minimalistą, a później się domyślam. ( ͡° ͜ʖ ͡°)
Blitzkrung
Blitzkrung
@lionbest: Czemu '+' pomiędzy wyrażeniami?
Dijuna
Dijuna Autor
0
@lionbest: to jest tak proste i genialne. Nie myślałem nawet żeby traktować te zera i jedynki jako liczby.
Dijuna
Dijuna Autor
0
@lionbest: a tak?

bool b = (static_cast((_a && !a_) ^ (_y && !y_)) ^ (_n && !n_));
Dijuna
Dijuna Autor
0
@lionbest: aaa, ok :P