Hallo,
ich habe ein Verständnisproblem und bitte daher um eure Hilfe.
Es geht um folgende Codezeile:
1 | phase.value16=phase.value16+DEGREE_180-(2*(phase.value16-DEGREE_90));
|
phase.value16 ist ein unsigned int 16 aus einer union. Das
Gesamtergebnis der Formel ist immer positiv.
Doch wie geht der Compiler mit
1 | (2*(phase.value16-DEGREE_90))
|
um, wenn das Ergebnis in der Klammer negativ ist? Anders gefragt, kann
das Ergebnis negativ sein wenn mit unsigned Variablen gearbeitet wird?
Z.B.
1 | #define DEGREE_90 512
|
2 | #define DEGREE_180 1024
|
3 | phase.value16=0;
|
4 |
|
5 | (2*(phase.value16-DEGREE_90))
|
ist das Ergebis der Klammer dann -1024 ?
Also das Gesamtergebnis
1 | phase.value16 = 0 + DEGREE_180-(2*(phase.value16-DEGREE_90));
|
phase.value16 == 0 ???
Ich hoffe das ich mich einigermaßen verständlich ausgedrückt habe.
Gruß
Ernst
AVR GCC mit AVR Studio