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.
> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.