Was passiert, wenn ich uint kleiner null mache?

Gast #1549767
> uint8_t sind immer 8 bit, und 8 Bit sind immer Definiert. Also kenn es
> schon mal nicht undefiniert sein.

Stimmt so nicht.

> Es wird wohl danach 255 sein.

Das ist es.
Gast #1549780
> > uint8_t sind immer 8 bit, und 8 Bit sind immer Definiert. Also kenn es
> > schon mal nicht undefiniert sein.
> Stimmt so nicht.
sagst du auch noch warum nicht?
#1549803
Vorzeichenlose Integer-Typen wrappen, erhalten also den maximalen Wert, 
wenn der minimale um 1 verringert wird.

Für vorzeichenbehaftete garantiert das der C-Standard übrigens nicht, 
das Ergebnis ist dort "undefined".
#1549827
Peter schrieb:
>> > uint8_t sind immer 8 bit, und 8 Bit sind immer Definiert. Also kenn es
>> > schon mal nicht undefiniert sein.
>> Stimmt so nicht.
> sagst du auch noch warum nicht?

Nach deiner 'Definition' wäre grundsätzlich alles und jedes in einem 
Computer definiert. Denn irgendeinen Wert muss ja jedes Bit haben. Es 
wird ja nicht aus dem Nichts heraus erzeugt, sondern ist hardwaremässig 
immer vorhanden.

Mit undefiniert ist aber gemeint: Ist in der Sprachdefinition für diesen 
Fall eine Regel vorhanden, die dem Programmierer (und auch dem 
Compilerbauer) die Information liefert, welcher Wert nach der Operation 
vorliegen muss.

Und in diesem Fall ist genau das der Fall.
Für unsigned Rechnungen ist im C-Standard tatsächlich festgelegt, wie 
sich die Berechnung verhalten muss, wenn ein Overflow bzw. Underflow 
erfolgt.
Und das hat nichts mit 8 Bit zu tun, sondern damit, dass es sich um 
unsigned Arithmetik handelt.
#1549881
> uint8_t sind immer 8 bit, und 8 Bit sind immer Definiert.

Natürlich ist für jeden elementaren Typ der Wertebereich definiert; das 
ist banal.

Dir Frage richtete sich aber nicht auf den Wertebereich, sondern eine 
bestimmte arithmetische Operation, die auf einen solchen Typ angewandt 
wird.  Und mit einer kleinen Modifikation wäre die schon undefiniert 
gewesen, obwohl es sich immer noch um 8 Bit gehandelt hätte.  Obige 
Aussage ist also im vorhandenen Kontext eine Nullaussage und beantwortet 
die Frage (wenn sie denn als brauchbare Lösung in Betracht käme) falsch.
Gast #1549927
Also damit wäre das Problem ausführlich beantwortet. Aufgrund der 
besseren Lesbarkeit und Nachvollziehbarkeit werde ich den Überlauf trotz 
definierten Verhaltens wohl vermeiden.

Dank!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.