Forum: Mikrocontroller und Digitale Elektronik Was macht diese Bascom Zeile?


von BasBeginner (Gast)


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 ?

von Mitlesa (Gast)


Lesenswert?

BasBeginner schrieb:
> Ist das eine Division durch 8 ?

Nein, eine Division durch 256.

Eine 8-fache division durch 2.

von Karl M. (Gast)


Lesenswert?

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".

von W.P. K. (elektronik24)


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.

von Mitlesa (Gast)


Lesenswert?

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.

Beitrag #5056660 wurde von einem Moderator gelöscht.
von Autsch (Gast)


Lesenswert?

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.

von Compare17 (Gast)


Lesenswert?

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

von wolke (Gast)


Lesenswert?

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!

von Nibble-Tribble (Gast)


Lesenswert?

Er meint sicher ein Long-Nibble. :-)))

von Mitlesa (Gast)


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.

von Brutus (Gast)


Lesenswert?

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!

von Oberlajtnant (Gast)


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.

von Mitlesa (Gast)


Lesenswert?

Oberlajtnant schrieb:
> Nein, das ist zur Verdeutlichung, daß alle 16 Bit verrückt werden,

Dumpfbacken verstehen diesen versteckten Gag natürlich nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.