incrementieren ohne overflow

Gast #76842
Hallo,

irgendwo im Programm möchte ich einen unsigned char um einen Wert
zwischen 0 und ca. 100 erhöhen.
Ist der Wert z.B. schon auf 200 und wird er um 100 erhöht soll das
Maximum, also 255 herauskommen.
Bei mir sieht das so aus:

if ( (256-Value) > Change) Value+=Change; else Value=255;

So in etwa hätte ich das auch in Pascal gemacht. Aber c ist doch was
viel tolleres. Gibt es da nicht irgend eine einfachere Schreibweise?

Vielen Dank an die c Profis

Gruß
Martin
Gast #76843
In C kannst Du auch schreiben:

value = ((255 - change) < value) ? (value+change) : 255;

Ob das toller ist, musst Du selber entscheiden. Deine Formel oben
scheint mir aber nicht ganz richtig zu sein, kontrollier sie mal nach.

Wenn Du gcc wirklich auf 8 Bit zwingen willst, musst Du manchmal etwas
nachhelfen, z.B. Konstanten auf 8 Bit casten. Wenn es zeit- oder
platzkritisch ist, öfter mal das Compiler-Ergebnis im Assembler
anschauen.

Stefan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.