Forum: Mikrocontroller und Digitale Elektronik "signed variable" und "and" verknüfung


von Rolf R. (ultra-low)


Lesenswert?

Hallo

Ich hab da was ganz Einfaches kann aber nirgens was eindeutiges finden.

1: int16_t var_1 = -0x01;
2: var_1 = var_1 & 0x000f;
3: var_1 = var_1 & 0x800f;

Ist jetzt var_1(2) immer noch -1, merkt es der Compiler(AVRStudio5) oder 
muss ich dran denken und so wie (3) schreiben.

Danke. Gruss.
von g457 (Gast)


Lesenswert?

> 2: var_1 = var_1 & 0x000f;
> 3: var_1 = var_1 & 0x800f;
>
> Ist jetzt var_1(2) immer noch -1 [..]

Wieso sollte es? ..wenn ich mich nicht verrechnet hab müsse es jetzt 
"15" sein..

> oder muss ich dran denken und so wie (3) schreiben.

Weder noch. Mach Dir erst mal klar wie "-1" (bitweise!) dargestellt 
wird.

HTH
von Reinhard Kern (Gast)


Lesenswert?

Rolf Riller schrieb:
> muss ich dran denken

ist beim Programmieren immer zu empfehlen - der Compiler erzeugt bei 2 
möglicherweise eine Warnung, dass eine logische Operation nicht auf eine 
Signed Variable passt, tut es aber wahrscheinlich trotzdem, und dann 
wird bei 2 das Sign-Bit gelöscht und 11 weitere Bits (-1 ist nämlich 
0FFFF), Ergebnis ist 15. Und bei 3 ergibt sich 0800F, was nach meinem 
Taschenrechner -32753 ist.

Irgendwas berücksichtigen kann der Compiler beim besten Willen nicht - 
selbst ich weiss nicht, was du eigentlich erreichen willst.

Gruss Reinhard
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.