Nachdem offensichtlich sonst keiner mitspielen will:Xin hat geschrieben:Keine Ahnung, aber nur weil das Ergebnis sich nicht mehr ändert, wird die Aufgabe doch nicht falsch!? Ein Compiler meckert - denke ich - auch nicht, wenn man c *= 1 oder c += 0 schreibt.mfro hat geschrieben:Joker-Frage: warum gibt auch der standardkonformste und penibelste Compiler trotz "-Wall" keine Warnung aus, obwohl man eine char Variable (die ja nur 8 Bits hat) um 9 Bits shiftet?
Lass Dir mit der Antwort mehr Zeit - damit auch andere eine Schätzung abgeben können.
eine Warnung kommt deswegen nicht, weil tatsächlich nicht mehr Bits geshiftet werden, als die Variable Bits hat.
Auch hier findet (durch den Shift-Operator) eine integer promotion statt: vor dem Shiften wird die Variable auf 32 Bit erweitert und das Ergebnis geshiftet. Anschließend werden die überflüssigen Bits abgeschnitten.
Probiert's aus: der Compiler bringt die Warnung erst, wenn mehr als 31 Bits geshiftet werden.