Hallo Franz
Bsp.:
unsigned int result;
result = ADDAT & 0x03FF;
Das Problem ist, dass die CPU nur 16Bit Zugriffe machen kann.
ADDAT enthält aber nur 10 Bit mit denen gerechnet werden soll.
Je nachdem wie jetzt ADDAT aufgebaut ist können die restlichen 6 Bit weitere Informationen über den ADC enthalten oder ganz einfach zufällige Werte liefern.
0x03FFF = 0000 0011 1111 1111B
mit
ADDAT & 0x03FF;
wird sichergestellt, dass die obersten 6 Bits immer auf ‚0‘ gesetzt sind.
Je nach Datentyp wird immer mit ALLEN 8, 16, 32 oder 64 Bits der Variablen gerechnet.
Ein Byte im Speicher ist einfach nur eine bestimmte Kombination aus 0ern und 1nsen, mehr nicht. Erst aus dem Kontext ergibt sich irgendweine Bedeutung.
die Zahl 1234, irgendwo im täglichen Leben, sieht man auch nicht an, was sie bedeutet. Das kann eine Hausnummer, ein PIN, eine Direktwahl für eine bestimmte Person, ein Preis oder sonstwas bedeuten. Genau so ist es auch beim Computer.
Wie die einzelnen Bits zu interprettieren sind geht erst aus dem Kontext hervor, welchen du mit deinem Programm erstellst hervor.
z.B. signed oder unsigned.
Bei signed und einem 8Bit Wert wird 0xFF als -1 betrachtet, da die Konvention für signed basagt, dass das höchstwertige Bit das Vorzeichen darstellt udn jenachdem die restlichen 7 Bit den Wert als binärzahl oder 2er-Komplement darstellen.
Beim Kontext unsigned stellt 0xFF den Wert 255 dar.
Eine CPU hat auch keine Ahnung von Buchstaben. Hier gilt aus dem Kontext, dass der Wert 0x41 dem ‚A‘ entspricht, hier muss man aber auch noch angeben, dass der ASCII-Code verwendet wird, es gibt noch andere Codierungen für Buchstaben und Zahlen.
In einem anderen Kontext, kann 0x41 aber auch bedeuten, dass im Keller das Licht brennt und jemand gerade an der Haustür klingelt.
Oder es kann ein Opcode sein.
Dem Byte sieht man das nicht an, genausiwenig wie deine CPU weiss, dass sie nur mit den unteren 10 Bits aus ADDAT rechnen soll.
MfG Peter(TOO)