C - Wertzuweisung 2
-
Hallo,
ich habe nochmal nachgedacht und hoffe ich kann meine Frage nun strukturiert stellen.
Was ich nun verstande habe ist, dass der Formatstring Platzhalter wirklich nur die passenden festgelegten Werte zulässt,
da gibt es keine wenn und aber. Da gibt zu jedem Datentyp einen entsprechenden Platzhalter. Ansonsten bekommt man ein undefiniertes Verhalten.also ich habe folgendes für mich zusammengetragen
int bzw. long (bei mir so habe ich mit sizeof abgefragt)
Wertebereich: -2^31 - 2^31 - 1
Dezimal-Literale: -2147483648 - +2147483647
unsigned long
Wertebereich: 0 - 2^32 - 1
Dezimal-Literale: 0ul - 4294967295ul
long long
Wertebereich: -2^63 - 2^63 - 1
Dezimal-Literale: -9223372036854775808LL - +9223372036854775807LL
unsigned long long
Wertebereich: 0 - 2^64 - 1
Dezimal-Literale: 0ull - 18446744073709551615ull
-
Ich möchte wissen welche der folgende Wertzuweisungen unproblematisch sind un welche dies nicht sind - in diesem Fall dann warum.
-
Welche Zuweisungen werden zwar ausgeführt, weisen der Variable aber
nicht den gewünschten Wert der rechten Seite zu? (Was passiert stattdessen?) -
Welchen Wert und Datentyp haben die rechten "elementaren Ausdrücke"
bzw. sind diese überhaupt alle gültig?
ich möchte teilweise Werte von oben und teilweise vlt etwas merkwürde
Werte einer unsigned long long variable zuordnen:Hinweis: ich habe die Werte so konstruiert das immer den Wertebereich von einem der obigen Datentypen überschreiten positiv und negativ.
(ich hab immer die erste oder zweite Stelle um 1 größer gemacht)unsigned long long number = -19000000000000000000 ;
unsigned long long number = -9300000000000000000 ;
unsigned long long number = -5000000000 ;
unsigned long long number = -3000000000 ;
unsigned long long number = -1 ;
unsigned long long number = 3000000000 ;
unsigned long long number = 5000000000 ;
unsigned long long number = 9300000000000000000 ;
unsigned long long number = 19000000000000000000 ;
unsigned long long number = -19000000000000000000ul ;
unsigned long long number = -9300000000000000000ul ;
unsigned long long number = -5000000000ul ;
unsigned long long number = -3000000000ul ;
unsigned long long number = -1ul ;
unsigned long long number = 3000000000ul ;
unsigned long long number = 5000000000ul ;
unsigned long long number = 9300000000000000000ul ;
unsigned long long number = 19000000000000000000ul ;
unsigned long long number = -19000000000000000000LL ;
unsigned long long number = -9300000000000000000LL ;
unsigned long long number = -5000000000LL ;
unsigned long long number = -3000000000LL ;
unsigned long long number = -1LL ;
unsigned long long number = 3000000000LL ;
unsigned long long number = 5000000000LL ;
unsigned long long number = 9300000000000000000LL ;
unsigned long long number = 19000000000000000000LL ;
unsigned long long number = -19000000000000000000ull ;
unsigned long long number = -9300000000000000000ull ;
unsigned long long number = -5000000000ull ;
unsigned long long number = -3000000000ull ;
unsigned long long number = -1ull ;
unsigned long long number = 3000000000ull ;
unsigned long long number = 5000000000ull ;
unsigned long long number = 9300000000000000000ull ;
unsigned long long number = 19000000000000000000ull ;
Vielen Dank für alle Hilfe,
James
-
-
Das sollte alle deine Fragen beantworten:
-
@JamesNguyen Und du darfst auch den Compiler fragen, wenn der Warnlevel auf höchster Stufe steht.
Dann lernst du auch gleich, wie die Meldungen dazu aussehen.
Es geht um die Warnungen, nicht darum was der Compiler daraus macht. Bei UB kann jeder Compiler etwas Anderes machen.