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 ?
Hallo,
nur so als Tipp im Bascomforum werden die User Dir auch helfen und
man glaubt es kaum, es gibt auch Hilfewebseite:
https://avrhelp.mcselec.com/index.html?shift.htm
Erster Link bei einem bekannten Suchsystem mit "Shift bascom".
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.
W.P. K. schrieb:> Shift right verschiebt die obersten (also die 8 linken) 8 Bit nach> rechts
Nein. Shift right verschiebt alle Bits nach rechts.
Sonst würden ja plötzlich auf einer Bitposition 2 Bits stehen.
Mitlesa schrieb:> Nein. Shift right verschiebt alle Bits nach rechts.
Bei einem 16-Bit-Wert sind die linken 8 Bit alle, die am Ende übrig
bleiben.
Im Endeffekt wird also das High-Nibble an das Low-Nibble verschoben. Das
High-Nibble wird dann zu 0.
Autsch schrieb:> Im Endeffekt wird also das High-Nibble an das Low-Nibble verschoben. Das> High-Nibble wird dann zu 0.
Sehe ich genau so.
Lange Ausführung:
Lo(Decay) = Hi(Decay)
Hi(Decay) = 0
ODER:
Decay = Decay / 256
Autsch schrieb:> Mitlesa schrieb:>> Nein. Shift right verschiebt alle Bits nach rechts.>> Bei einem 16-Bit-Wert sind die linken 8 Bit alle, die am Ende übrig> bleiben.> Im Endeffekt wird also das High-Nibble an das Low-Nibble verschoben. Das> High-Nibble wird dann zu 0.
Autsch, lies nochmal nach was ein Nibble ist!
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.
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!
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.
Oberlajtnant schrieb:> Nein, das ist zur Verdeutlichung, daß alle 16 Bit verrückt werden,
Dumpfbacken verstehen diesen versteckten Gag natürlich nicht.