Forum: Mikrocontroller und Digitale Elektronik Arduino Code


von IDLER (Gast)


Lesenswert?

Hallo,

was tut folgender Arduino Code?

wert = wert >>2;

Danke.

von Wolfgang (Gast)


Lesenswert?

Das kommt auf den Typ deiner Variablen wert an.

von NurEinGast (Gast)


Lesenswert?

Es wir der Inhalt von 'wert' um 2 Bit nach rechts verschoben.
Die Auswirkung kommt auf den Datentyp von 'wert' an.
Bei Typen wie uint8_t, unsigned char ... ist es eine Division durch 4.
Vielleicht wird 'wert' hier ja auch bitweise verwendet ? Das können wir 
aber nicht wissen.

von npn (Gast)


Lesenswert?

Rechts-Shift um 2 Bits

von IDLER (Gast)


Lesenswert?

int Wert = 0;

von Wolfgang (Gast)


Lesenswert?

IDLER schrieb:
> int Wert = 0;

Dann bewirkt die Code-Zeile für positive Zahlen eine Division durch 4.

Für negative müsstest du dich mal mit der Zweierkomplementdarstellung 
befassen.

Beitrag #5403117 wurde von einem Moderator gelöscht.
von npn (Gast)


Lesenswert?

Wolfgang schrieb:
> IDLER schrieb:
>> int Wert = 0;
>
> Dann bewirkt die Code-Zeile für positive Zahlen eine Division durch 4.
>

Wenn Wert=0 ist, dann bewirkt ein Rechtsshift gar nichts.
Danach ist Wert immer noch Null.

von IDLER (Gast)


Lesenswert?

Vielen Dank für die schnelle und kompetente Hilfe.

Die Variable wird immer >= 0 sein.

Warum dividiert man mit einem Rechtsshift und nutzt nicht sofort eine 
Division?

Hat das mit Geschwindigkeit und Aufwand zu tun?

Ich denke eine Division wird im Compiler viel aufwändiger sein, d.h 
langsamer und ressourcenfressend?

Danke

von spess53 (Gast)


Lesenswert?

Hi

>Die Variable wird immer >= 0 sein.

Die kann auch negativ sein.

MfG Spess

von npn (Gast)


Lesenswert?

spess53 schrieb:
> Die kann auch negativ sein.

Du kennst seinen Code?

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

IDLER schrieb:
> Warum dividiert man mit einem Rechtsshift und nutzt nicht sofort eine
> Division?

Eine Shift-Operation ist mit einem Assemblerbefehl gemacht, echte 
Divisionen dauern je nach Prozessor deutlich länger. Allerdings kann man 
mit dieser Shift-Operationen nur durch Zweierpotenzen dividieren.

von IDLER (Gast)


Lesenswert?

Danke,

auch an Spess53 der meinen Code kennt und wohl beim NSA arbeitet??

von Dieter F. (Gast)


Lesenswert?

npn schrieb:
> Du kennst seinen Code?

Nö, er kennt INT

von Thomas R. (r3tr0)


Lesenswert?

Aii, bei unsigned int könnts nur positiv sein.
Da er int benutzt könnts auch in den negativen Zahlenbereich.
KÖNNTE.

Aber da wir den Code nicht kennen, wissen wir es natürlich nicht.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> Warum dividiert man mit einem Rechtsshift und nutzt nicht sofort
> eine Division?

Weil "man" glaubt, dass die effizienter sei. Jeder mir bekannte Compiler 
erzeugt bei beiden Varianten allerdings exakt den selben Maschinencode 
(nämlich die shift Operation):

wert = wert >>2;
wert = wert / 4;

von Luther B. (luther-blissett)


Lesenswert?

Stefanus F. schrieb:
>> Warum dividiert man mit einem Rechtsshift und nutzt nicht sofort
>> eine Division?
>
> Weil "man" glaubt, dass die effizienter sei. Jeder mir bekannte Compiler
> erzeugt bei beiden Varianten allerdings exakt den selben Maschinencode
> (nämlich die shift Operation):
>
> wert = wert >>2;
> wert = wert / 4;

nicht exakt das gleiche, weil (im 2-er Komplement):

-10 >> 2 == -3
-10 / 4  == -2

von Stefan F. (Gast)


Lesenswert?

Ich meine natürlich unsigned Integer. Kein normaler Mensch benutzt shift 
Operationen mit signed Integer. Obwohl ... Akademikern traue ich alles 
zu.

von Georg M. (g_m)


Lesenswert?


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.