www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Änderung des Datentyps z.B. (long) test


Autor: Question (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe folgende (für euch sicher einfache) Frage:
char test=0; 

int main (void)
{

 while(1)
 {
  printf("Test: %u\n"),(long)test; // Ist ab hier der Datentyp von test "long" oder ist es nur für die Ausgabe long und springt danach wieder auf char zurück?
 }


return 0;
}

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Question schrieb:
> oder ist es nur für die Ausgabe long
Ja.
> und springt danach wieder auf char zurück?
Er springt nicht zurück, weil er nie hingesprungen ist,
sondern er wird nur für diese eine Stelle anders interpretiert.
Die Variable test an sich ist und bleibt ein char.

Autor: olykar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube es bleibt Char aber könntest du evtl. mit der 
sizeof(variable) Funktion prüfen.

Autor: Question (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Question schrieb:
>> oder ist es nur für die Ausgabe long
> Ja.
>> und springt danach wieder auf char zurück?
> Er springt nicht zurück, weil er nie hingesprungen ist,
> sondern er wird nur für diese eine Stelle anders interpretiert.

Danke für die superschnelle Rückmeldung.

Das heißt also:
char test=0; 

int main (void)
{

 while(1)
 {
  // hier kann ich mit char wieder Rechnungen von -128 bis 127 durchführen oder?
  printf("Test: %u\n"),(long)test; // Ist ab hier der Datentyp von test "long" oder ist es nur für die Ausgabe long und springt danach wieder auf char zurück?
  // hier kann ich mit char wieder Rechnungen von -128 bis 127 durchführen oder?
 }


return 0;
}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Question schrieb:
> printf("Test: %u\n"),(long)test;

Das ist kaputt.

> printf("Test: %u\n", (long) test);

So sollte es aussehen.

Wobei %u nicht der richtige Formatstring für long ist. %u steht für 
unsigned int.

Autor: Question (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Question schrieb:
>> printf("Test: %u\n"),(long)test;
>
> Das ist kaputt.
>
>> printf("Test: %u\n", (long) test);
>
> So sollte es aussehen.
>
> Wobei %u nicht der richtige Formatstring für long ist. %u steht für
> unsigned int.

Stimmt. Da hast du natürlich recht. Richtig wäre: %li

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau. Diese long in Klammern nennt sich "cast". Schau mal in ein 
C-Buch.

Es ändert den Typ nur sozusagen punktuell.

Nimm sowas wie:
char i;

while (i < (int) i * 128)


dann wird nur an der Stelle wo (int) steht das i als int betrachtet aber 
nicht da wo i alleine steht oder sonstwo.

Man könnte das umkehren und fragen, warum sollte an einer Stelle wo 
kein cast steht der Datentyp geändert werden? Man geht einfach davon 
aus, das es so ist, was auch konsistent ist, denn sonst müsste es einen 
Operator geben, der diese Umwandlung wieder rückgängig macht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.