Hi Peter!
Ist nicht egal.
Das Ergebnis von (a) $x=$foo >> 5 & 1 lautet 1/0, das von (b) $x=$foo & (1 << 5) lautet 32/0...
Allgemein erhältst du mit deiner Anweisung (sei $x,$foo ein word)
a) 4 Befehle:
mov ax, ds:[speicheradresse];
shr ax, 5;
and ax, 1;
mov wordptr ds:[speicheradresse2], ax;
b) 3 Befehle
mov ax, ds:[speicheradresse];
and ax, 32; //Kompileroptimierung berechnet 2^5 ...
mov wordptr ds:[speicheradresse2], ax;
Somit ist "ein klein wenig effizienter" doch ca. 25% (jedoch abhängig von den für die Ausführung benötigten Taktzyklen dauern nicht alle Befehle gleichlang)...
Ideal wäre eine Selbstzuweisung:
$foo = $foo & (1<<5);
Diese (könnte) der Kompiler optimieren zu:
and wordptr ds:[speicheradresse], 32
Grüsse,
Richard