For bis einschließlich Null herunterzählen (schleife, loop, 0)?

Gast #3613627
Lesenswert?
• ▲
▼
Wie kommt man in C elegant (optimal?) von x auf 0? Der TI Compiler bzw. 
die Codeanalyse schlägt vor, auf 0 zu testen sei effizienter. Allerdings 
ist der Endwert dann nicht Null. Und wie folgt ist es kein Test auf 0 
mehr:
1
#include <stdio.h>
2
#include "stdint.h"
3
void main(){
4
      int8_t i;
5
      for(i=5;i>=0;i--)
6
           printf("i = %d\n", i);
7
}

Bleibt da nur, bis 1 herunterzuzählen und dann 1 abzuziehen?

http://openbook.galileocomputing.de/c_von_a_bis_z/008_c_kontrollstrukturen_010.htm#mj0e01c5c1715a4bfc3d2c91245fd45535
Gast #3613641
Lesenswert?
• ▲
▼
Wenn ich mal scherzhaft so formulieren darf: Starre nicht wie die 
Schlange auf's Kaninchen. Es gibt auch noch Meerschweinchen und Mäuse. 
In diesem Zusammenhang while und do-while Schleifen.
1
#include <stdio.h>
2
#include "stdint.h"
3
void main(){
4
  int8_t i = 6;
5
  do {
6
    i--;
7
    printf("i = %d\n", i);
8
  } while (i != 0);
9
}
Moderator #3613647
Lesenswert?
• ▲
▼
Die allermeisten Prozessoren haben die Statusflags Z und N. Ist x das
Ergebnis der letzten Rechenoperation, die der Prozessoren durchgeführt
hat, dann ist
1
Z = (x == 0)
2
N = (x <  0)

Da diese Flags ebenfalls bei den allermeisten Prozessoren sowohl direkt
als auch invertiert abgefragt werden können, sind die die folgenden
Schleifenabbruchbedingungen
1
i == 0
2
i != 0
3
i <  0
4
i >= 0

und bei einem ordentlichen Compiler auch die zu den letzten beiden
äquivalenten
1
i <= 1
2
i > -1

alle gleich gut und ohne zusätzlichen Vergleichsbefehl in Maschinencode
umsetzbar.

Im Zweifelsfall kannst du dir ja den jeweils erzeugten Assemblercode
anschauen.
#3613741
Lesenswert?
• ▲
▼
Yalu X. schrieb:

> alle gleich gut und ohne zusätzlichen Vergleichsbefehl in Maschinencode
> umsetzbar.

Und zu guter letzt sind derartige Dinge in mehr als 99.5% aller Fälle 
NICHT der Ort im Programm, an dem man mit Optimierung ansetzt. Wenn es 
darum geht in einem Programm die letzten 100 Nanosekunden(!) 
rauszuholen, weil man die unbedingt und um jeden Preis benötigt, ja dann 
wird das relevant. Aber mit derartigen Optimierungen kann man aus einer 
lahmen Schnecke kein Rennpferd machen - die lahme Schnecke bleibt auch 
danach noch eine lahme Schnecke.

Langer Rede kurzer Sinn: Wenn TI sagt, dass das effizienter sein, dann 
wird das schon so sein. Aber effizienter heißt in diesem Zusammenhang, 
dass dein Programm um vielleicht 0.000001 % schneller läuft, was in der 
Praxis komplett irrelevant ist.
Ich kenn leider auch den Code von so ein paar 
Mikrooptimierungsanhängern: völlig sinnlose 'Optimierungen' auf 
Mikroebene, die de facto nichts bringen und nur den Code unleserlich und 
unwartbar machen. Dort wo sie auf hoher Ebene Optimierungen hätten 
vornehmen können, die dann auch tatsächlich etwas gebracht hätten, das 
haben sie links liegen gelassen. Dafür haben sie sich in ihren eigenen 
'Optimierungen' so verfangen, dass sie Fehler nicht mehr beheben können, 
weil kein Mensch mehr durchblickt, wie das alles eigentlich hätte laufen 
sollen. Aber Hauptsache man bringt Mikrooptimierungen an (die heutige 
Compiler in der Mehrzahl alle selbst beherrschen), weil man ja so ein 
toller Programmierer ist, der gaaaanz tolle Tricks kennt.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.