Ich habe ein Stück Code in C mit folgendem:
%Vor%Wenn ich das nicht irre, entspricht das:
%Vor%Was ist der Vorteil in Bezug auf die Leistung, um den ersten zu schreiben? Für mich ist es komplizierter zu lesen, aber ich nehme an, der Typ, der das geschrieben hat, hatte einen besseren C-Hintergrund als ich.
Danke
Aller Wahrscheinlichkeit nach gibt es keinen Leistungsunterschied, da der Compiler feststellt, dass ((1<<24) - 1)
ein konstanter Ausdruck ist, und wird ihn zur Kompilierzeit auswerten.
Wir können nur darüber spekulieren, warum der ursprüngliche Autor des Codes es so gewählt hat, wie sie es getan haben. Vielleicht dachten sie, dass es die Absicht besser ausdrückt ("maskiere alle außer den 24 niedrigstwertigen Bits von b
").
Wenn das ihre Argumentation wäre, würde ich persönlich mit ihnen übereinstimmen.
Im Allgemeinen sollten Sie vermeiden, Anweisungen wie die erste zu verwenden.
Das einzige Szenario, von dem ich denken kann, dass der erste Satz vorzuziehen ist, ist, wenn die Zahl 24 eine Bedeutung hat. (Was sowieso definiert und benannt sein sollte.)
Wie, wenn aus irgendeinem Grund in dieser Codezeile 24 sein kann, und an einer anderen Stelle könnte es 22 sein.
Genau genommen der Ausdruck
%Vor%ist nicht portierbar und kann ein undefiniertes Verhalten haben, da 1 als int behandelt wird und der Standard nur 16 Bits für einen int garantiert. Wenn Sie immer noch für eine solche Implementierung codieren ... Wenn a und b Inte sind, dann können Sie sicher ableiten, dass das Ziel nur modernere Implementierungen sind, natürlich mit Ints mit 32 oder mehr Bits.
Tags und Links c