וההסבר -
כמו שכבר כתבו, פעולת החיבור | שונה מפעולת החיבור +, לגמרי, אלא שבאלגברה בוליאנית יש חוקים בהם הפעולות מתנהגות בצורות דומות ולכן יש להם אותו שם. מה שאתה עשית הוא:
c3 = (c1 | c2) c3 = (c3 | c2)
אבל כמו בחיבור, מיקום הסוגריים לא משנה (לא זוכר את שמו של החוק), ולכן ניתן לכתוב גם:
c3 = c3 | c2 = (c1 | c2) | c2 = c1 | (c2 | c2)
באלגברה בוליאנית, יש חוק שאומר x + x = x, כלומר ברגע שאתה מחבר מספר עם עצמו, הוא שווה לעצמו, והרי דוגמא:
11001101 11001101 ------------ + 11001101
ברגע שאתה מחבר מספר עם עצמו, קיימות רק שתי אפשרויות של חיבור ביטים: (1 + 1) ששווה 1 באלגברה בוליאנית, ו- (0 + 0), שבאלגברה בוליאנית ובכל אלגברה שאני מכיר, שווה 0. לכן אין שינוי, ואז אפשר לכתוב:
c3 = c1 | c2 c3 = c3 | c2 = c1 | c2 | c2 = c1 | c2
ולכן אין השורה השניה בכלל לא משנה את הערך של c3, וקומפלייר ממש טוב אפילו ימחק שורה כזאת בקומפליציה (אני רוצה להאמין לפחות, בעולם אידיאלי)...