C ++ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдореБрджрд╛рдп рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
habrahabr.ru/post/166201 рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╖рдп рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЙрдХрд╕рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
C ++ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдСрдкрд░реЗрдЯрд░ рдХреА рдХрдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реАрдорд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рд▓рд╛рдпрд╛ред
рдореИрдВ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реА ++ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреА рдЧрдИ рд╢рд░реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рддреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╛рдиреА рдПрдХ рдФрд░ "рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ" - рд▓реЗрдХрд┐рди рди рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рди рдХреЗрд╡рд▓ "рд╕реНрд╡рд┐рдЪ" рдХреЗ рд▓рд┐рдПред
рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдореВрд▓ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╣рд▓реЗ рд╣реА рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдкрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рд░реВрдк рдореЗрдВ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ рдпрджрд┐ рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░ рдПрдХ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ ?: рдПрдХ рд╕реНрд╡рд┐рдЪ рд╕реНрдерд┐рддрд┐ рдореЗрдВ
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ "рдкрд░реАрдХреНрд╖рдг" рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд░ рд╣реИ рдФрд░ "var_ i" i = 1, .., 4 рд╡реЗ рдЪрд░ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП
рдирд┐рд░реНрдорд╛рдг рд╕реЗ
bool bool_1, bool_2, bool_3, bool_4;
bool_1 = (рдкрд░реАрдХреНрд╖рдг == var_1);
bool_2 = (рдкрд░реАрдХреНрд╖рдг == var_2);
bool_3 = (рдкрд░реАрдХреНрд╖рдг == var_3);
bool_4 = (рдкрд░реАрдХреНрд╖рдг == var_4);
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ bool_ ii = 1, .., 4 рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИрдВ рдФрд░ рдЪрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ var_i i = 1, .., 4 рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред
рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
рд╕реНрд╡рд┐рдЪ (bool_1? 1: 0) | (bool_2? 2: 0) | (bool_4: 0: 0) - (bool_4? 8: 0))
рдФрд░ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рджреЛ рдХреА рдмрд╛рдЗрдирд░реА рд╢рдХреНрддрд┐рдпреЛрдВ рдкрд░ "рдпрд╛" рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдоред
рдпрд╣ рди рдХреЗрд╡рд▓ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реНрд╡рд┐рдЪ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рднреА рд╕рддреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рднреА рд╣реИ рдЕрд░реНрдерд╛рддреНред 4 рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА 16 рд╡рд┐рдХрд▓реНрдкред
рдкреНрд░рддреНрдпреЗрдХ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдореЗрдВ рджреЛ рдХреА рдХреНрд░рдорд┐рдХ рд╢рдХреНрддрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд╕реНрд╡рд┐рдЪ рдореЗрдВ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдХрд┐рд╕реА рднреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЖрдЧреЗ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рд╡рд╣, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЪрд░ рдмреВрд▓_ ii = 1, .., 4 рдХреА рд╕рдЪреНрдЪрд╛рдИ рд╕реЗ рджреЛ рдпрд╛ рдЕрдЧрд▓реЗ 0 рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛ред рджреЛ рдореЗрдВ рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдмреЗрд╢рдХ, рд╕рдВрдпреЛрдЧ рд╕реЗ рдирд╣реАрдВ, рд╡реЗ рд╕рднреА рд╕рдВрднрд╡ рд╕рддреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ bool_ i рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ, рддреЛ рд╕реНрд╡рд┐рдЪ рдХреНрд▓рд╛рд╕рд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ bool_ i рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рд╕рднреА 0. рджреЗрдВрдЧреЗред рд╕реНрд╡рд┐рдЪ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╣ рд╕реНрдерд┐рддрд┐ рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рдЪрд░ bool_ i рд╕рддреНрдп рд╣реИред
рдпрджрд┐ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреВрд▓_рд┐ рдЪрд░ рд╕рддреНрдп рд╣реИрдВ, рддреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рдХреЗ рдЧрдгрд┐рддреАрдп рдЦрдВрдб рд╕реНрд╡рд┐рдЪ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдпреЗ рджреЛ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╢рдХреНрддрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реНрдерд┐рдд рдЗрдХрд╛рдЗрдпрд╛рдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЧрд╣реЛрдВ рдкрд░ рд╣реИрдВ рдФрд░ рд╡реЗ рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрдиреЗ рд░рд╣реЗрдВрдЧреЗ, рдЬрдмрдХрд┐ рд╢реЗрд╖ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╡реЗ 0 рд░рд╣реЗрдВрдЧреЗ
рдпрд╛рдиреА рд╕реНрд╡рд┐рдЪ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рдмрд╕ рдпреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреВрд▓_рд┐ рдЪрд░ рд╕рддреНрдп рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЭреВрдареА рд╣реИрдВред
рдиреАрдЪреЗ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╢рд░реНрдд b__ рдХреА рд╕рддреНрдпрддрд╛ рдХреЗ рд╢рд╛рд╕реНрддреНрд░реАрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдЪрд░ рдкрд░реАрдХреНрд╖рдг рдХреЛ var_i рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рди рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ
рд╕рддреНрдп рд╡рд┐рддрд░рдг рдХреЗ рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╕рддреНрдп рдХреЗ рд╕рдВрдЧрдд рд╡рд┐рд╡рд░рдг рджрд┐рдПред
рд╕реНрд╡рд┐рдЪ (bool_1? 1: 0) | (bool_2? 2: 0) | (bool_4: 0: 0) - (bool_4? 8: 0))
{
рд╕реНрдерд┐рддрд┐ 1: рдкрд░реАрдХреНрд╖рдг = var_1;
рддреЛрдбрд╝;
рдХреЗрд╕ 2: рдкрд░реАрдХреНрд╖рдг = var_2;
рддреЛрдбрд╝;
рд╕реНрдерд┐рддрд┐ 4: рдкрд░реАрдХреНрд╖рдг = var_3;
рддреЛрдбрд╝;
рдХреЗрд╕ 8: рдкрд░реАрдХреНрд╖рдг = var_4;
рддреЛрдбрд╝;
рдХреЗрд╕ 3: std :: cout << "bool_1 bool_2 true bool_3 bool_4 рдорд┐рдереНрдпрд╛" << std :: rl;
рддреЛрдбрд╝;
рдХреЗрд╕ 5: std :: cout << "bool_1 bool_3 true bool_2 bool_4 рдЧрд▓рдд" << std :: ll;
рддреЛрдбрд╝;
рдХреЗрд╕ 9: std :: cout << "bool_1 bool_4 true bool_2 bool_3 рдорд┐рдереНрдпрд╛" << std :: rl;
рддреЛрдбрд╝;
рдХреЗрд╕ 6: std :: cout << "bool_2 bool_3 рд╕рдЪ bool_1 bool_4 рдЧрд▓рдд" << std :: ll;
рддреЛрдбрд╝;
рдХреЗрд╕ 10: std :: cout << "bool_2 bool_4 true bool_1 bool_3 рдЧрд▓рдд" << std :: ll;
рддреЛрдбрд╝;
рдорд╛рдорд▓рд╛ 12: std :: cout << "bool_3 bool_4 true bool_1 bool_2 рдЕрд╕рддреНрдп" << std :: ll;
рддреЛрдбрд╝;
рдХреЗрд╕ 7: std :: cout << "bool_3 bool_2 bool_1 true bool_4 false" << std :: rl;
рддреЛрдбрд╝;
рдХреЗрд╕ 11: std :: cout << "bool_4 bool_2 bool_1 true bool_3 false" << std :: rl;
рддреЛрдбрд╝;
рдХреЗрд╕ 14: std :: cout << "bool_4 bool_2 bool_3 true bool_1 false" << std :: rl;
рддреЛрдбрд╝;
рдорд╛рдорд▓рд╛ 13: std :: cout << "bool_4 bool_1 bool_3 рд╕рдЪ bool_2 рдЕрд╕рддреНрдп" << std :: ll;
рддреЛрдбрд╝;
рдХреЗрд╕ 15: std :: cout << "bool_4 bool_1 bool_3 bool_2 true" << std :: endl;
рддреЛрдбрд╝;
рдбрд┐рдлрд╝реЙрд▓реНрдЯ: std :: cout << "рдпрд╣ 0 bool_1 bool_2 bool_3 bool_4 рдорд┐рдереНрдпрд╛ рдЬреИрд╕рд╛ рд╣реИ" << std :: endl;
}
рджрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдбреЗрдмрд┐рдпрди рдХреЗ рддрд╣рдд рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рд╣реИред
рдмреЗрд╢рдХ, рдЖрдк рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реНрд╡рд┐рдЪ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рди рдХреЗрд╡рд▓ 4 рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рднреАред рдЪреВрдВрдХрд┐ рд╕реНрд╡рд┐рдЪ рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рджред