Forum: Compiler & IDEs Problem beim schiften


von Andreas H. (andy78)


Lesenswert?

Hallo


habe ein Array


Feld 0 und 1


data[0]=0x82;
data[1]=0x6;


ich will nun daraus 0x682 machen


habe folgendes gemacht
uint8_t data[2];
uint8_t ergebniss=0;
ergebniss=data[1]<<8 & data[0];

es sollte dann 0x682 rauskommen.

von Klaus W. (mfgkw)


Lesenswert?

Und wo ist jetzt die Frage?

von Floh (Gast)


Lesenswert?

Andreas Herrmann schrieb:
> ergebniss=data[1]<<8 & data[0];

du meintest sicher :
ergebniss=data[1]<<8 | data[0];  //binäres oder, nicht und

außerdem ist ergebniss mit 8 Bit zu klein, da steht dann auch nur das 
drin, was ind data[0] drinsteht.
:-)

von Stefan E. (sternst)


Lesenswert?

Andreas Herrmann schrieb:

> uint8_t ergebniss=0;
> ergebniss=data[1]<<8 & data[0];
>
> es sollte dann 0x682 rauskommen.

Und wie sollte das in ein uint8_t passen?

von Andreas H. (andy78)


Lesenswert?

Hallo

jetzt gehts

uint16_t ergebniss=data[1]<<8 | data[0];



danke

von Frank B. (foobar)


Lesenswert?

Ich würde übrigens empfehlen, bei Shifts es immer in Klammern zu 
schreiben, also

uint16_t ergebniss = (data[1] << 8) | data[0];

Ist zwar bei dem binären ODER nicht notwendig, aber z.B. das hier gibt 
nicht das gewünschte Resultat, obwohl man das auf den ersten Blick 
meinen würde:

uint16_t ergebniss = data[1]<<8 + data[0];

da + und - eine höhere Ordnung als der Shift-Operator haben und es so 
ausgewertet wird:

uint16_t ergebniss = data[1] << (8 + data[0]);

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.