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


von Question (Gast)


Lesenswert?

Hallo!

Ich habe folgende (für euch sicher einfache) Frage:
1
char test=0; 
2
3
int main (void)
4
{
5
6
 while(1)
7
 {
8
  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?
9
 }
10
11
12
return 0;
13
}

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von olykar (Gast)


Lesenswert?

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

von Question (Gast)


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:
1
char test=0; 
2
3
int main (void)
4
{
5
6
 while(1)
7
 {
8
  // hier kann ich mit char wieder Rechnungen von -128 bis 127 durchführen oder?
9
  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?
10
  // hier kann ich mit char wieder Rechnungen von -128 bis 127 durchführen oder?
11
 }
12
13
14
return 0;
15
}

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Question (Gast)


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

von Huch (Gast)


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:
1
char i;
2
3
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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.