[c++] implizite typkonvertierung

hasugoon

Commander
Registriert
Juni 2004
Beiträge
2.798
hallo, es geht um folgendes simples fallbeispiel:

unsigned short n=20;
signed char c=-2;

n=n+c; //18

ich finde immer 2 unterschiedliche ansätze für die typkonvertierung.

1. bei arithmetischen operationen wird immer mit mindestens int (also signed) gerechnet. (das würde auch das ergebniss erklären)

2. mehr oder weniger schlaue bücher sagen aber auch folgendes: es wird auf der rechten seite immer auf den größten beteiligten typ konvertiert. hier: signed char->unsigned short. das würde allerdings dem ergebniss widersprechen.


da mir der debugger hier nicht wirklich weiterhilft meine frage: wie gehts nun wirklich?

sys: 32bit - compiler vs2005
 
Zuletzt bearbeitet:
Du solltest n mit nem Wert initialisieren ;) Weiss nicht wie der MS Compiler das handhabt, aber mit dem gcc ist die Variable dann undef und du bekommst nen zufälligen Zahlenwert.

BTW: Mit dem gcc kommt übrigens Variante 2 zum Zuge (n mit 0 initialisiert):

~ # ./a.out
65534
~ #
 
Zuletzt bearbeitet:
ah oO ich hab das wichtigste vergessen: n=20

danke, jetzt dürft ihr mir gerne antworten :>

@dcdead: hm dann ist das wohl mehr oder weniger compilerabhängig. ja da scheiden sich die geister oO
 
Der Compiler muss übrigens nicht zwangsläufig umrechnen. Dein Ergebnis kann auch durch überlauf entstehen, bspw. so:

unsigned short n=20;
signed char c=32766;
 
Zurück
Oben