alles char?



  • Du gibts dem Compiler ja einen Datentyp mit, daran erkennt er halt wie die Daten zu behandeln sind, ein int c = 123 ist nunmal die zahl 123, ein char c = 65 oder 'A' ist das Zeichen A, es stehen ja immer nur irgendwelche Zahlen im Speicher.
    Hängt halt vom Kontext ab wie etwas behandelt wird.
    Und grundsätzlich wird alles in Binär gespeichert, was anderes kennt ein Computer ja nicht.
    Und verrückt ist das auch nicht wirklich 😉



  • Ja, das ist so. Der Compiler rechnet alles um und auch alle deine Eingaben werden immer umgerechnet. Es gibt übrigens fertige Funktionen in C, die zB den string "123" in die Zahl 123 umwandeln, welche natürlich dann binär wider anders dargestellt wird. Verückt ist das nicht, das funzt nach einschlägigen Algorithmen, welche Du übrigens auch selber nachvollziehen kannst, wenn Du über die mathematischen Mitteln verfügst. Aber sei beruhigt, wenn man etwas neu kennen lernt, ist es immer krass, geht mit fast tagtäglich so 😉

    mfg
    Spunik



  • vileda schrieb:

    Du gibts dem Compiler ja einen Datentyp mit, daran erkennt er halt wie die Daten zu behandeln sind, ein int c = 123 ist nunmal die zahl 123, ein char c = 65 oder 'A' ist das Zeichen A, es stehen ja immer nur irgendwelche Zahlen im Speicher.

    na, das stimmt nicht ganz. der einzige unterschied zwischen signed char und int ist, dass ein int mehr bits als ein char hat und daher mehr informationsgehalt speichern kann. ob diese bitkombination nun als zahl, als zeichen oder sonstwas interpretiert wird, ist einzig und allein von dem code abhängig, der damit arbeitet.
    🙂



  • computer-freak schrieb:

    vileda schrieb:

    Du gibts dem Compiler ja einen Datentyp mit, daran erkennt er halt wie die Daten zu behandeln sind, ein int c = 123 ist nunmal die zahl 123, ein char c = 65 oder 'A' ist das Zeichen A, es stehen ja immer nur irgendwelche Zahlen im Speicher.

    na, das stimmt nicht ganz. der einzige unterschied zwischen signed char und int ist, dass ein int mehr bits als ein char hat und daher mehr informationsgehalt speichern kann. ob diese bitkombination nun als zahl, als zeichen oder sonstwas interpretiert wird, ist einzig und allein von dem code abhängig, der damit arbeitet.
    🙂

    Das ist schon so. Aber erstens wollte ich ihn nicht verwirren und zweitens sind die Datentypen in C ja für etwas gut und nicht nur, um immer ge-castet zu werden.

    mfg
    Sputnik



  • Sputnik schrieb:

    ...und zweitens sind die Datentypen in C ja für etwas gut und nicht nur, um immer ge-castet zu werden.

    wer hat den was von casting gesagt?
    🙂



  • Hehe, niemand. Aber er wollte ja nur wissen, wie Zahlen im System dargestellt werden, da denke ich, ist es einfach nicht das richtige ihn damit zu konfrontieren, dass es eigentlich gar keine unterschiede gibt ausser den grössen der Datentypen, sonst will er dann als nächstes wissen, was denn der unterschied von signed und unsigned ist und wie ein float im PC dargestellt wird. Dazu sollte er aber zuerst mal das andere versthen, sonst schlägt er sich die Birne gegen eine Wand 😉

    mfg
    Sputnik



  • Sputnik schrieb:

    ...sonst will er dann als nächstes wissen, was denn der unterschied von signed und unsigned ist und wie ein float im PC dargestellt wird.

    wieso nicht? das können wir ihm doch alles erklären.
    🙂



  • Stimmt schon, ist aber wahrscheinlich ein bisschen viel auf einmal.

    mfg
    Sputnik



  • wo überall in der IT gilt denn ASCII? Wann wird jedes einzelne Zeichen ASCII kodiert? Mich verwirrt zurzeit z. B. der Dat.typ int --> Man kann z. B. 30948983 in 4 Bytes unterbringen. In Textdateien nicht. Deswegen : wo überall gilt denn ASCII`? Bin wirklich total durcheinander. Am Anfang war ASCII total easy...



  • Reines ASCII triffst Du fast nirgend mer an, da im ASCII-Code zum Beispiel die Deutschen Umlaute nicht enthalten sind oder auch viele andere Schriftzeichen anderer Sprachen. Deshalb hat man UNI-Code entwickelt mit einer ISO-Standardisierung. Das soll dich jetzt aber nicht weiter verwirren, um das Prinzip verstehen zu können, reicht ASCII vollkommen, alles andere würde es nur komplizierter machen.

    Nun zu deinem Beispiel, dem Integer. Nehmen wir einmal an, du hast 4 Bytes zur Verfügung, um eine vorzeichenlose Ganzzahl zu speichern (das entspricht einem unsigned long int), dann sind das 4 Byte * 8 Bit/Byte = 32 Bit. Diese 32 Bit zusammen könne jetzt 2^32 verschieden Zustände annehmen, deshalb ist die höchste so darstellbare, vorzeichenlose Ganzzahl 2^32 - 1 = 4294967295. So weit noch klar? Ich gehen jetzt mal davon aus.
    Hast Du jetz aber ein ASCII-File, so wird jede Stellt der Zahl einzeln dargestellt und in einem Byte codiert und abgespeichert. Um auf das obige Beispiel zurückzukommen: Für die Zahl 4294967295 bräuchte ich in einer ASCII-Codierung also jetzt 10 Bytes, da jede Stelle ein eigenes Zeichen ist und auch so codiert und abgespeichert wird.

    Würdest du jetzt ein solche Zahl aus einer Datei lesen wollen und in einem unsigned long int abspeicher, um mit ihr zu rechnen, so müsstest Du die zuerst mit einem Algorithmus berechnen, da dir ja nur die einzelnen Zeichen vorliegen.
    Diese Funktion kannst Du selber schreiben (habe ich ein paar mal gemacht als Übung), musst du aber nicht, da es in der stdlib.h schon die Funktion atoi() gibt, die für dich ein string in einen int konvertiert (atol() konvertiert einen string in einen long).
    Natürlich gibts auch stadard Funktionen, die das ganze umgekehrt machen, für einen int würde sie itoa() heissen. Du kannst diese Funktionen sonst mal anschauen.

    Ich hoffe, ich konnte hilfreich sein,
    Sputnik


Anmelden zum Antworten