Thema: Delphi Hochrechnen

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#16

Re: Hochrechnen

  Alt 3. Sep 2003, 00:58
Power und IntPower sind
1.) viel zu ineffizient
2.) viel zu ungenau !! es können Rundungsfehler entstehen.

SHL und SHR sind ganz einfache Operationen und eigentlich ganz einfach zu verstehen. Sie multipliziren einen Wert mit einem Exponenten zur Basis 2. Damit ist SHL eine spezielle Form der Multiplikation X * Y zur Basis 2. X := Y * 2^e -> X := Y shl e.
SHR ist eine Division X := Y div 2^e --> X := Y shr e.

SHL heist Shift Left.
SHR heist Shift Right.

Alle Zahlen auf unseren Computer sind Binärzahlen also zu Basis 2.
Zb. 10 ist 2^3 + 2^1 = 8 + 2. Binär sehe das so aus

Code:
   
      4    3    2    1    0
     2^4  2^3  2^2  2^1  2^0
      16    8    4    2    1
 
10 =  0    1    0    1    0
Oben siehst du eine Tabelle mit 5 Spalten, jede Spalte representiert den Exponenten zur Basis 2, und darunter habe ich den mal ausgerechnet.
Die unterste Zeile ist unsere 10, bei jeder 1 müssen wir also mit dem darüberstehenden Wert rechnen. Also 10 = 8 + 2 = 2^3 + 2^1.

Ein Links Schift um 1 Bit wäre demnach 20 = 10 shl 1, und ein Rechtsshift um 1 wäre 5 = 10 shr 1
und sehe so aus:

Code:
       4    3    2    1    0
     2^4  2^3  2^2  2^1  2^0
      16    8    4    2    1
 
10 =  0    1    0    1    0
20 =  1    0    1    0    0    = 10 shl 1
 5 =  0    0    1    0    1    = 10 shr 1
Die oberste Zeile zeigt auch die Logische Bitnummer an.

Da SHL/SHR direkte Pascal Bezeichner für Maschinenbefehle sind, sind sie enorm effizient.

Gruß Hagen

PS: bevor einer meint das es noch effizientere Wege als SHL/SHR gibt, ja die gibt es besonders auf moderneren Rechnern.
  Mit Zitat antworten Zitat