Wpis z mikrobloga

#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?
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@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
  • Odpowiedz
@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;
  • Odpowiedz
@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ą.
  • Odpowiedz
@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.
  • Odpowiedz
@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
  • Odpowiedz