Forum: Mikrocontroller und Digitale Elektronik bitweise links shift in C


von tom (Gast)


Lesenswert?

Hallo,

ich versuche hier gerade einen C Code zu verstehen.
Eine Variable v wird als int deklariert und bekommmt den Wert dezimal 0 
zugewiesen.

In einer Funktion wird dann später

nächste Variable = (v<<8)

festgelegt.

Bedeutet died, dass nächste Variable nun den Wert 256 hat ?

Was würde denn aus nächster Variable in der Funktion werden, wenn v 
zuvor einen Wert von 64 hätte ? Auch wieder 256 ?

Danke

von Stefan E. (sternst)


Lesenswert?

tom schrieb:
> Bedeutet died, dass nächste Variable nun den Wert 256 hat ?

Nein, 0.

tom schrieb:
> Was würde denn aus nächster Variable in der Funktion werden, wenn v
> zuvor einen Wert von 64 hätte ?

16384

von H.Joachim S. (crazyhorse)


Lesenswert?

hm, ne Null kann man schieben, so oft man Lust hat - bleibt dennoch 
immer 0.

von Falk B. (falk)


Lesenswert?

@  tom (Gast)

>Eine Variable v wird als int deklariert und bekommmt den Wert dezimal 0
>zugewiesen.

>In einer Funktion wird dann später

>nächste Variable = (v<<8)

>festgelegt.

>Bedeutet died, dass nächste Variable nun den Wert 256 hat ?

Wie soll das gehen? Wenn man 00000000 achtmal links schiebt ist es immer 
noch Null.

>Was würde denn aus nächster Variable in der Funktion werden, wenn v
>zuvor einen Wert von 64 hätte ? Auch wieder 256 ?

Lies mal was zum Thema Arithmetik von Binärzahlen.
Was pssiert, wenn man bei einer Dezimalzahl im normalen Leben das Komma 
um eine Stelle nach rechts schiebt?

MfG
Falk

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

tom schrieb:
> Eine Variable v wird als int deklariert und bekommmt den Wert dezimal 0
> zugewiesen.
>
> In einer Funktion wird dann später
>
> nächste Variable = (v<<8)
>
> festgelegt.
>
> Bedeutet died, dass nächste Variable nun den Wert 256 hat ?

Nein. Eine 0 kannst Du schieben, bis Du alt wirst. Es bleibt 0.

Ham wer schon en der Schull in der Kaygass Nummer 0 jelernt...

Jruß.. ähem Gruß,

Frank

von tom (Gast)


Lesenswert?

Ok. Eine Null zu schieben ... habe ich begriffen. Leider hilft mir das 
beim Code nun auch nicht weiter :-(

aus 64 --> 0b0100 0000 wird
16384  --> 0b0100 0000 0000 0000 ?

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Ein schickes Tool um soetwas 'per Hand' nach zu rechnen ist BinCalc.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

tom schrieb:
> Ok. Eine Null zu schieben ... habe ich begriffen. Leider hilft mir das
> beim Code nun auch nicht weiter :-(
>
> aus 64 --> 0b0100 0000 wird
> 16384  --> 0b0100 0000 0000 0000 ?

Wenn Du eine Zahl 1mal nach links schiebst, dann entspricht dies einer 
Multiplikation mit 2. Wenn Du sie 8mal schiebst, dann entspricht dies 
einer Multiplikation mit 2*2*2*2*2*2*2*2 = 256.

256 x 64 = 16384. Dein Schaubild mit den binären Nullen ist korrekt.

von tom (Gast)


Lesenswert?

Danke Rene. :-)

von tom (Gast)


Lesenswert?

Danke Frank

von vip (Gast)


Lesenswert?

Rene Schube schrieb:
> Ein schickes Tool um soetwas 'per Hand' nach zu rechnen ist BinCalc.

Per Hand und rechnen lassen durch einen besseren Taschenrechner 
widerprechen sich irgendwie. Das einzig sinnvolle, um sowas per Hand zu 
machen, ist Stift und Papier, wenn man es im Kopf nicht kann. Dann 
versteht man auch, was man tut.

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.