Würden Sie num% 2 oder num & 1 verwenden, um zu überprüfen, ob eine Zahl gerade ist?

Nun, es gibt mindestens zwei Methoden, um festzustellen, ob eine bestimmte Zahl gerade ist oder nicht:

 1. if (num%2 == 0) { /* even */ } 
 2. if ((num&1) == 0) { /* even */ }

Ich halte die zweite Option für weitaus eleganter und sinnvoller, und das ist die, die ich normalerweise benutze. Es ist aber nicht nur Geschmackssache; Die tatsächliche Leistung kann variieren: Normalerweise sind die bitweisen Operationen (wie die logische und die hier) weitaus effizienter als eine Mod- (oder Div-) Operation. Natürlich können Sie argumentieren, dass einige Compiler es trotzdem optimieren können, und ich stimme zu ... aber einige werden es nicht.

Ein weiterer Punkt ist, dass der zweite für weniger erfahrene Programmierer etwas schwieriger zu verstehen sein könnte. Darauf würde ich antworten, dass es wahrscheinlich nur jedem nützen wird, wenn diese Programmierer sich so kurze Zeit nehmen, um Aussagen dieser Art zu verstehen.

Was denkst du?

Die angegebenen zwei Ausschnitte sind nur dann korrekt, wennnum ist entweder ein vorzeichenloses int oder eine negative Zahl mit einer Zweierkomplementdarstellung. - Wie einige Kommentare rechtfertigen.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage