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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.