Heim > Backend-Entwicklung > C++ > Ist ein vorzeichenbehafteter Ganzzahlüberlauf in C immer noch ein undefiniertes Verhalten?

Ist ein vorzeichenbehafteter Ganzzahlüberlauf in C immer noch ein undefiniertes Verhalten?

Linda Hamilton
Freigeben: 2024-12-25 01:18:25
Original
690 Leute haben es durchsucht

Is Signed Integer Overflow in C   Still Undefined Behavior?

Vorzeichenbehafteter Ganzzahlüberlauf in C: Immer noch undefiniertes Verhalten

Wie in der C 11-cstdint-Dokumentation hervorgehoben, sind vorzeichenbehaftete Ganzzahltypen wie int8_t, int16_t , int32_t und int64_t verwenden das Zweierkomplement für negative Werte. Dies hat die Frage aufgeworfen: Bedeutet dies, dass ein Überlauf dieser Typen nicht mehr als undefiniertes Verhalten gilt?

Nein, ein Überlauf dieser Typen bleibt in C ein undefiniertes Verhalten.

Gemäß Abschnitt 5/4 des C 11-Standards führt jeder Ausdruck, dessen Ergebnis nicht mathematisch definiert ist oder außerhalb des darstellbaren Bereichs des Typs liegt, zu „undefiniert“. Verhalten.

Während int8_t, int16_t, int32_t und int64_t das 2er-Komplement verwenden, bedeutet dies nicht, dass das arithmetische Modulo 2^n angewendet wird. Im Standard heißt es ausdrücklich:

„Das Ergebnis einer vorzeichenlosen arithmetischen Operation ist immer ‚mathematisch definiert‘ und das Ergebnis liegt immer innerhalb des darstellbaren Bereichs; daher gilt 5/4 nicht.“

Daher folgt die vorzeichenlose Arithmetik den Gesetzen der Arithmetik Modulo 2^n, und ein Überlauf ist kein undefiniertes Verhalten. Bei vorzeichenbehafteter Arithmetik bleibt der Überlauf jedoch ein undefiniertes Verhalten, unabhängig von der zugrunde liegenden Darstellung.

Das obige ist der detaillierte Inhalt vonIst ein vorzeichenbehafteter Ganzzahlüberlauf in C immer noch ein undefiniertes Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage