Bits einen Integer zuweisen - was passiert?

Ich hab nicht gewusst, dass ein Integer 16 Bit hat. Ich bin von dem 10 Bit Ergebnis ausgegangen …

Lustig sind ja die Sachen wie -2 ist größer als 1 …
Oder wenn man eine riesige Zahl mit einer sehr kleinen addiert.

Die Sachen sind mir schon halbwegs klar.

Also hat die Umwandlung nichts mit den Variablentypen zu tun. Aber warum mache ich die Umwandlung nochmal? Es steht keine Zahl wie 3,65 drinnen. Ich muss diese Zahl mit meiner Maximalamplitude multiplizieren und durch die Anzahl der Stufen (da 10 Bit Ergebnis = 1024 Stufen) dividieren.

Was steht vorher in meinem Register drinnen?

Grüße
Franz

Also hat die Umwandlung nichts mit den Variablentypen zu tun.
Aber warum mache ich die Umwandlung nochmal? Es steht keine
Zahl wie 3,65 drinnen. Ich muss diese Zahl mit meiner
Maximalamplitude multiplizieren und durch die Anzahl der
Stufen (da 10 Bit Ergebnis = 1024 Stufen) dividieren.

zur Darstellung von komma zahlen geht hier lang http://www.gdv.informatik.uni-frankfurt.de/lehre/ws2…

stell mal in deinen 10 Bits die zahl

1024,1024 dar

das geht wohl nicht mit nur 10 bits , da brauchst du wohl 2 x 10 bits

folglich (ohne rundung)

00 00 00 00 00 = 0/1024 * MAX Volt = 0V
00 00 00 00 01 = 1/1024 * MAX Volt = 0V
00 00 00 00 10 = 2/1024 * MAX Volt = 0V
00 00 00 00 11 = 3/1024 * MAX Volt = 0V
00 00 00 01 00 = 4/1024 * MAX Volt = 0V
00 00 00 01 01 = 5/1024 * MAX Volt = 0V
00 00 00 01 10 = 6/1024 * MAX Volt = 0V
00 00 00 01 11 = 7/1024 * MAX Volt = 0V
.
00 11 11 11 11 = 255/1024 * MAX Volt = 1V
.
11 11 11 11 11 = 1024/1024 * MAX Volt

11 11 11 11 11 /
11 11 11 11 11 *
00 00 00 01 01 = 5

bei . in der Rechnung wird auf double gecastet, also alle zu 8 Byte werten

also wir nehmen mal an das ein double ganz einfach dadurch gebildet wird das die ersten 2 Bytes die Zahl vor dem komma ist, und die 2 Bytes nach dem komma. 1 Byte hat 8 Bits

00 00 00 11 11 11 11 11 00 00 00 00 00 00 00 00 /
00 00 00 11 11 11 11 11 00 00 00 00 00 00 00 00 *
00 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 =

so ähnlich stehts im speicher ,

das ergeniss kann nun ein weiter 32Byte double komma wert sein oder
auf int reduziert ohne komma anteil, also 16 Byte oder 32 Byte :smile:

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)

THX :smile: