Änderung des Datentyps z.B. (long) test

Gast #2043553
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
}
Gast #2043579
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
}
Gast #2043613
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren