Vorteil des Schreibens (124 - 1) anstelle von FFFFFF?

7

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

    
drolex 25.05.2011, 13:16
quelle

7 Antworten

8

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.

    
NPE 25.05.2011, 13:18
quelle
14

Es gibt keinen Unterschied in der Leistung, da der Compiler die Berechnung für Sie durchführt.

Die erste Option kann verwendet werden, um explizit zu verdeutlichen, dass Sie 24 gesetzte Bits verwenden. Dies ist in der zweiten Option schwerer zu zählen.

    
Tomas 25.05.2011 13:18
quelle
2

Ich kann keinen Vorteil aus Sicht der Leistung sehen, wie aix sagt.

Für mich jedenfalls scheint es in der ersten Version klarer zu sein, dass der konstante Wert 2 ^ 24-1 ist als die letztere Form. Natürlich denke ich, das ist nur eine Meinung.

    
Simone 25.05.2011 13:21
quelle
2

Wenn es nicht Teil eines größeren Codeblocks ist, mag ich die Verwendung von 0xFFFFFF besser.

Aber es kann denkbar sein, Teil einer Gruppe ähnlicher Aussagen zu sein. Dann ist die Schichtversion (wohl) besser.

%Vor%     
pmg 25.05.2011 13:34
quelle
1

Kein Leistungsvorteil für ((1<<24) - 1) . Es kann langsamer sein, da es einige Operationen ausführen muss ( << und - ), während 0xFFFFFF eine Konstante ist. Im besten Fall berechnet der Compiler den 1. zur Kompilierzeit und sie wären äquivalent.

    
Claudiu 25.05.2011 13:18
quelle
1

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.

    
Yochai Timmer 25.05.2011 13:19
quelle
0

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.

    
Secure 25.05.2011 14:06
quelle

Tags und Links