Als «integer-overflow» getaggte Fragen

Ein ganzzahliger Überlauf tritt auf, wenn das Ergebnis einer Operation größer ist als der Maximalwert, der durch den zugrunde liegenden ganzzahligen Typ dargestellt werden kann.


4
(-2147483648> 0) gibt in C ++ true zurück?
-2147483648 ist die kleinste Ganzzahl für den Ganzzahltyp mit 32 Bit, aber es scheint, dass sie im if(...)Satz überläuft : if (-2147483648 > 0) std::cout << "true"; else std::cout << "false"; Dies wird truein meinen Tests gedruckt . Wenn wir jedoch -2147483648 in eine Ganzzahl umwandeln, ist das Ergebnis anders: …


5
Warum ist ein vorzeichenloser Ganzzahlüberlauf als Verhalten definiert, ein vorzeichenbehafteter Ganzzahlüberlauf jedoch nicht?
Der vorzeichenlose Ganzzahlüberlauf ist sowohl im C- als auch im C ++ - Standard gut definiert. Zum Beispiel heißt es im C99-Standard ( §6.2.5/9) Eine Berechnung mit vorzeichenlosen Operanden kann niemals überlaufen, da ein Ergebnis, das nicht durch den resultierenden vorzeichenlosen Ganzzahltyp dargestellt werden kann, modulo um die Zahl reduziert …


15
So vermeiden Sie einen Überlauf in expr. A B C D
Ich muss einen Ausdruck berechnen, der aussieht wie : A*B - C*D, wo ihre Typen sind: signed long long int A, B, C, D; Jede Zahl kann wirklich groß sein (ohne ihren Typ zu überlaufen). Während A*Bdies zu einem Überlauf führen kann, A*B - C*Dkann der Ausdruck gleichzeitig sehr klein …
161 c++  c  integer-overflow 


6
(A + B + C) ≠ (A + C + B) und Compiler-Neuordnung
Das Hinzufügen von zwei 32-Bit-Ganzzahlen kann zu einem Ganzzahlüberlauf führen: uint64_t u64_z = u32_x + u32_y; Dieser Überlauf kann vermieden werden, wenn eine der 32-Bit-Ganzzahlen zuerst umgewandelt oder zu einer 64-Bit-Ganzzahl hinzugefügt wird. uint64_t u64_z = u32_x + u64_a + u32_y; Wenn der Compiler jedoch beschließt, den Zusatz neu zu …


8
Effiziente Besetzung ohne Vorzeichen, um ein von der Implementierung definiertes Verhalten zu vermeiden
Ich möchte eine Funktion definieren, die ein unsigned intas-Argument verwendet und ein intkongruentes Modulo UINT_MAX + 1 an das Argument zurückgibt. Ein erster Versuch könnte so aussehen: int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } Wie jeder Sprachanwalt weiß, ist das Casting von nicht signiert zu signiert für Werte größer als …


3
Ist der vorzeichenbehaftete Ganzzahlüberlauf in C ++ immer noch undefiniertes Verhalten?
Wie wir wissen, ist ein vorzeichenbehafteter Ganzzahlüberlauf ein undefiniertes Verhalten . In der C ++ 11- cstdintDokumentation gibt es jedoch etwas Interessantes : Ganzzahliger Typ mit Vorzeichen mit einer Breite von genau 8, 16, 32 bzw. 64 Bit ohne Auffüllbits und Verwendung des Zweierkomplements für negative Werte (nur bereitgestellt, wenn …


12
Vorzeichenüberlauf in C / C ++ erkennen
Auf den ersten Blick scheint diese Frage ein Duplikat von Wie erkennt man einen Ganzzahlüberlauf? es ist jedoch tatsächlich deutlich anders. Ich habe festgestellt, dass das Erkennen eines vorzeichenlosen Ganzzahlüberlaufs zwar ziemlich trivial ist, das Erkennen eines vorzeichenbehafteten Überlaufs in C / C ++ jedoch schwieriger ist, als die meisten …

5
Java Integer compareTo () - warum Vergleich vs. Subtraktion verwenden?
Ich habe festgestellt, dass die java.lang.IntegerImplementierung der compareToMethode wie folgt aussieht: public int compareTo(Integer anotherInteger) { int thisVal = this.value; int anotherVal = anotherInteger.value; return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1)); } Die Frage ist, warum Vergleich statt Subtraktion verwendet wird: return thisVal - anotherVal;

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.