mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino Code


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: IDLER (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Hallo,

was tut folgender Arduino Code?

wert = wert >>2;

Danke.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kommt auf den Typ deiner Variablen wert an.

Autor: NurEinGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: npn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rechts-Shift um 2 Bits

Autor: IDLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int Wert = 0;

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 vom Autor gelöscht.
Autor: npn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: IDLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Die Variable wird immer >= 0 sein.

Die kann auch negativ sein.

MfG Spess

Autor: npn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Die kann auch negativ sein.

Du kennst seinen Code?

Autor: Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: IDLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke,

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

Autor: Dieter F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
npn schrieb:
> Du kennst seinen Code?

Nö, er kennt INT

Autor: Thomas R. (r3tr0)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Stefanus F. (Firma: Äppel) (stefanus)
Datum:

Bewertung
-1 lesenswert
nicht 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;

: Bearbeitet durch User
Autor: Luther B. (luther-blissett)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefanus F. (Firma: Äppel) (stefanus)
Datum:

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

Autor: Georg M. (g_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.