Schnelle Division durch 2

7

Gibt es eine schnellere Art der Division durch 2, mit Vorzeichen, in der Baugruppe als die im Beispiel unten?

%Vor%     
DavidH 10.01.2010, 10:17
quelle

1 Antwort

21

Sicher:

%Vor%

Der sar Opcode unterscheidet sich von shr darin, dass das höchstwertige (Vorzeichen-) Bit in sar beibehalten wird und in shr auf 0 gesetzt wird. Die Wikipedia-Seite Arithmetische Verschiebung zeigt viel detailliertere Informationen über diese Operation in einem allgemeinen Kontext.

Beachten Sie, dass auf einem Zweierkomplement-Rechner (der x86 ist) tatsächlich floor(eax / 2) berechnet wird. Das bedeutet insbesondere, dass für eine Ganzzahl x gilt:

  • für x = 0 ist das Ergebnis 0
  • für x & gt; 0 , das Ergebnis ist floor (x / 2)
  • für x & lt; 0 , das Ergebnis ist auch floor (x / 2) oder -ceil (-x / 2)

Das letztere Ergebnis liefert Ergebnisse, die unerwartet sein können. Zum Beispiel ergibt -3 sar 1 -2, nicht -1. Auf der anderen Seite führt 3 sar 1 zu 1.

    
Greg Hewgill 10.01.2010, 10:19
quelle

Tags und Links