Zitat von
s1ckST4R
/edit: bzw. was ich noch nicht ganz Versteh... wenn man den ASCII Code liest is 48 = 0 und wenn man 0; macht is das ja %00
Bitte drücke dich mal präziser aus, aber ich denke ich weiß was du meinst. Du musst dir die Daten im Speicher vorstellen:
Code:
char a[5];
/.../speicherblabla|[0]|[1]|[2]|[3]|[4]|speicherblabla/.../
so, wenn du jetzt cin >> a machst und sagen wir mal abcd eingibst, dann muss das in die Variable gespeichert werden. So würde das aussehen, wenn man die Zeichen als ASCII interpretiert:
Code:
/.../speicherblabla|a|b|c|d|*NUL*|speicherblabla/.../
Computer arbeiten mit Zahlen, Buchstaben bedeuten nichts für sie. ASCII ist eine Art, eine 2^8 Bit-Zahl als Buchstabe darzustellen.
Derselbe Speicher wie oben sieht also zahlentechnisch gesehen so aus:
Code:
/.../speicherblabla|a|b|c|d|*NUL*|speicherblabla/.../
=
/.../speicherblabla|97|98|99|100|0|speicherblabla/.../
=
/.../speicherblabla|0x61|0x62|0x63|0x64|0x0|speicherblabla/.../
Wichtig ist, dass diese drei Beispiele den identischen Speicher darstellen, das bedeutet der Inhalt ist der gleiche, wenn auch anders dargestellt, nämlich einmal als ASCII, einmal als Dezimalzahlen und einmal als Hexadezimalzahlen. Wie man sieht ist die nullterminierung übrigens einfach die Zahl 0. So, jetzt nehmen wir mal an, du gibst nicht abcd sondern 1234 ein.
Code:
/.../speicherblabla|1|2|3|4|*NUL*|speicherblabla/.../
=
/.../speicherblabla|49|50|51|52|0|speicherblabla/.../
=
/.../speicherblabla|0x31|0x32|0x33|0x34|0x0|speicherblabla/.../
Du siehst schon, dass das verwirrend sein kann. Sind das jetzt "echte" Zahlen oder ASCII-kodierte Ziffern?
Die Quersumme von 1234 ist
1+2+3+4 = 10.
Wenn du jetzt
quersumme = a[0] + a[1] + a[2] + a[3];
machst, so werden die _Werte_ der einzelnen Felder addiert. Die Werte sind 49, 50, 51 und 52, da der Computer wie gesagt keinen Grund hat, die ASCII-Bedeutungen der einzelnen Felder zu addieren. Also würde er dir
49+50+51+52 = 202
ausgeben, und das ist ja nicht unsere Quersumme.
Wenn wir jetzt also wissen, wie der Computer die Ziffern behandelt, können wir Gegenmaßnahmen ergreifen. Wie man aus der obigen Zeichentabelle erkennen kann, entsprechen die ASCII Ziffern 0-9 den ZAHLENWERTEN 48-57. Wenn man jetzt vom Zahlenwert 48 subtrahiert, so erhält man die "ASCII-Bedeutung". Du könntest nun also
quersumme = a[0] - 48 + a[1] - 48 + a[2] - 48 + a[3] - 48;
rechnen (ohne schleife), und das würde die jeweiligen Zahlenwerte addieren.
Statt vier mal 48 zu subtrahieren kannst du natürlich auch
quersumme = a[0] + a[1] + a[2] + a[3] - 4*48; (Kommutativgesetz)
rechnen.
aber du meintest das des 48*4 so wie 48-4 wirkt also sind wir auf "-" is dan im endeffekt 48*8 = - oder wie? Das is das einzige was ich noch nicht peil =/
Unverständlich formuliert.