"signed variable" und "and" verknüfung

OP #2469779
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.
Gast #2469798
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
Gast #2469819
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren