Ich habe zwei Variablen von long int Geben Sie wie unten gezeigt ein:
long int a=-2147483648, b=-2147483648;
a=a+b;
printf("%d",a);
Ich bekomme null. Ich habe versucht, den Typ zu ändern long long intaber ich bekomme immer noch nicht die richtige Antwort.
%d erwartet ein int…
– Oliver Charlesworth
22. Juli 2013 um 3:40 Uhr
Café
Sie müssen verwenden %ld drucken a long intund %lld drucken a long long int.
Beachten Sie nur das long long int garantiert groß genug ist, um das Ergebnis dieser Berechnung (oder tatsächlich die von Ihnen verwendeten Eingabewerte) zu speichern.
Sie müssen auch sicherstellen, dass Sie Ihren Compiler in einem C99-kompatiblen Modus verwenden (z. B. mit der -std=gnu99 Option zu gcc). Dies liegt daran, dass die long long int Typ wurde erst 1999 eingeführt; und obwohl viele Compiler implementieren long long int im C90-Modus als Erweiterung die Konstante 2147483648 kann eine Art haben unsigned int oder unsigned long im C90. Wenn dies in Ihrer Implementierung der Fall ist, dann ist der Wert von -2147483648 wird auch einen unsignierten Typ haben und daher positiv sein, und das Gesamtergebnis wird nicht Ihren Erwartungen entsprechen.
int main() { long long int a,b; scanf(“%d%d”,&a,&b); a=a+b; printf(“%lld”,a); getch(); 0 zurückgeben; } Immer noch kein Glück, Sir….
– Ranger101
22. Juli 2013 um 3:46 Uhr
@JijoPi verwenden %lld zum scanf() zu.
– Chris Loonam
22. Juli 2013 um 3:48 Uhr
int main() { long long int a,b; a=-2147483648; b=a; a=a+b; printf(“%lld”,a); getch(); 0 zurückgeben; }…………….. immer noch keine Antwort … ich glaube, das Zeichen ist verloren …
– Ranger101
22. Juli 2013 um 3:51 Uhr
@JijoPi – Ich habe Ihr Programm gerade wörtlich ausprobiert und es hat funktioniert. Was ist Ihre Wortgröße? (Was ist die Ausgabe von printf("%d",sizeof(long long int));?)
– rabensky
22. Juli 2013 um 4:21 Uhr
@cluracan: Welchen Typ die Konstante genau hat, hängt von den Breiten Ihrer Grundtypen ab. Wenn Sie einen C90-Compiler mit 64 Bit haben long intdann die Art von 2147483648 wird vom Typ sein long int (also unterschrieben). Wenn Ihr C90-Compiler jedoch einen 32-Bit-Compiler hat long intdann die Art von 2147483648 wird sein unsigned long int. Dies ist in §3.1.3.2 im C90-Standard definiert: Der Typ einer Integer-Konstante ist der erste der entsprechenden Liste, in der ihr Wert dargestellt werden kann. Dezimalzahl ohne Suffix: int, long int, unsigned long int.
%d
erwartet einint
…– Oliver Charlesworth
22. Juli 2013 um 3:40 Uhr