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