Was macht diese Bascom Zeile?

Gast #5056599
Lesenswert?

Hey Leute,

Habe mir ein Bascom Programm angesehen.
Bin aber erst am Anfang meiner Lernkurve, daher kapier ich eine Zeile 
nicht.

Da wird folgendes getan:

Deklaration:
Dim Level As Word
Dim Decay As Word

Code:
Decay = Level
Shift Decay , Right , 8
Level = Level - Decay

Ist das eine Division durch 8 ?
#5056617
Lesenswert?

Decay ist eine Variable im Format Word, d.h. 16 bit groß.
Shift right verschiebt die obersten (also die 8 linken) 8 Bit nach 
rechts, von links wandern Nullen nach.

Die (vormals) rechten Bit gehen dabei verloren.
Beispiel:
Decay=40.000 dez., das ist binär: 1001 1100 0100 0000
nach 8x shift right: 0000 0000 1001 1100, das Ergebnis wäre 156 dez.

Ist also das gleiche wie wie 8x ein einfaches Shift Right. In anderen 
Worten: 8 Mal eine Division durch 2 (=/256).

nach der letzten Zeile im Code hätten wir dann
40.000 - 156 = 39.844 dez. oder 1001 1011 1010 0100

Die Zeilen machen also nichts anderes als 1/256tel abzuziehen. 
Vermutlich löst man es so, weil es schneller geht, sprich die 
Zeitintensiven divisionsroutinen umgeht.
Beitrag #5056660 wurde von einem Moderator gelöscht.
Gast #5057982
Lesenswert?

Mitlesa schrieb:
> Nein. Shift right verschiebt alle Bits nach rechts.
> Sonst würden ja plötzlich auf einer Bitposition 2 Bits stehen.

Ich behaupte nach wie vor dass meine Aussage korrekt ist.
Ich bezog mich auf diese Aussage:

W.P. K. schrieb:
> Shift right verschiebt die obersten (also die 8 linken) 8 Bit nach
> rechts, von links wandern Nullen nach.

und das ist nicht korrekt. Insbesondere redet diese Aussage nur
von den "obersten" Bits. Nochmal: nein, ein Shift verschiebt
alle Bits, nicht nur die obersten.

Während meine Aussage allgemein richtig ist (ich habe keine
Einschränkungen getroffen), beziehen sie die Widersprecher auf
den Sonderfall der aber in der kritisierten Aussage nicht
genannt ist.
Gast #5058000
Lesenswert?

Brutus schrieb:
> Mitlesa schrieb:
>> Während meine Aussage allgemein richtig ist
>
> Die Aussage, dass alle Bits geschoben werden, ist richtig.
> Aber der zweite Teil, dass sonst 2 Bits auf einer Bitposition stehen
> würden, ist (um es mal höflich auszudrücken) absoluter Humbug!

Nein, das ist zur Verdeutlichung, daß alle 16 Bit verrückt werden, 
also als Ganzes wandern schon recht anschaulich.

Es gibt (viele) Leute, di mit solch einem mechanistischen Denken gut 
zurecht kommen. Darüber hinaus ist in Bascom ein guter Simulator 
vorhanden, mit dem man schrittweise Zugucken kann, wie die freundlichen 
Bits ruhig und geordnet nach rechts marschieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren