Was macht dieser C Code?

Ich habe hier ein Stück in C geschriebenen Code den ich nicht so ganz verstehe:
dalpbaaca.jpg

Kann mir jemand sagen was dieser Code genau macht? Besonders die Zeile c += (c>=’A’ && c
 
Lowercase funktion - konvertiert alle Buchstaben in Kleinbuchstaben um.
Mir fällt gerade der korrekte Name für den ?: Operator nicht ein, aber hier gibts eine kleine Beschreibung:
http://de.wikibooks.org/wiki/C-Programmierung:_Ausdrücke_und_Operatoren#Bedingung_.3F:
die Syntax ist also:
Code:
Bedingung ? Ausdruck1 : Ausdruck2
Trifft die Bedingung zu, wird Ausdruck1 ausgewertet, sonst Ausdruck2.
D.h in dem Fall:
c+= ist dasselbe wie c=c+ ...
trifft
Code:
(c>='A' && c<='Z*)
zu
ist also char c ein Großbuchstabe[1], so wird Ausdruck1='a'-'A' ausgewertet und man erhält
c=c+'a'-'A'[1]

Anderenfalls wird c nicht verändert, da ausdruck2=0 ist und das ganze Statement
c=c+0 ergibt.

[1]Das sind ASCII Rechnerreien. D.h jedes ASCII Zeichen entspricht einem Wert.
Einfach eine ASCII Tabelle suchen und anschauen, sollte sich von alleine erklären lassen.
Tipp: 'a' hat den Wert 97, 'A' = 65. D.h wenn c='G'=71 ist,
so wird c=c+('a'-'A'== 32) ausgeführt - dh. c=71+32=103='g'
 
Ich hätte noch eine Frage hierzu. Und zwar steht die Zeile in der Schleife wäre bei Verwendung der Überlaufarithmetik äquivalent zu
Code:
min(’Z’+1+min_t-’A’ > c+min_t-’A’ ? 0xff : 0, ’a’-’A’)
So wie ich das verstanden hätte: Bei der Bedingung wird wieder über die Ascii Werte überprüft ob es sich um einen Groß- oder Kleinbuchstaben handelt. Ist es ein Großbuchstabe wird 0xff (also 255) zurückgeliefert und sonst das Minimum aus 0 und 'a'-'A'. Aber irgendwas muss ich da wohl falsch verstehen, denn Minimum aus 0 und a-A wäre ja immer 0 und dann würde das irgendwie keinen Sinn ergeben. Kann mich jemand aufklären?
 
Ist es ein Großbuchstabe wird 0xff (also 255) zurückgeliefert und sonst das Minimum aus 0 und 'a'-'A'.
Nope - zumindest wenn ich Dich richtig verstehe (was im Moment nicht ganz so einfach ist, da nicht klar ist, welche min Funktion gemeint ist und woher die äquivalenz samt "min_t"&Co Variablen kommt ;) ).
Angenommen diese Bedingung ist korrekt formuliert:
Code:
’Z’+1+min_t-’A’ > c+min_t-’A
d.h bei der Auswertung min(Expression1,Expression1)
wird zuerst Expression1 ausgewertet (in dem Fall "’Z’+1+min_t-’A’ > c+min_t-’A’ ? 0xff : 0"), dann Expression2( 'a'-'A' sollte Dezimal 32 entsprechen) und dann erst das Minimum ermittelt.

Also:
Code:
Expression1_result=
’Z’+1+min_t-’A’ > c+min_t-’A’ ? 0xff : 0
wird ausgewertet und liefert bei einem großbuchstaben 0xff, sonst 0.
bleibt also noch die Auswertung von
min(Expression1_result,'a'-'A'==32).
Ist das Ergebnis des ersten Ausdrucks also 0xff (im Falle eines Großbuchstabens), liefert min(0xff, 'a'-'A'==32) den Wert 'a'-'A' zurück - somit kann die Umwandlung stattfinden.
Ist das Ergebnis des Ausdruck dagegen 0 (Kleinbuchstabe), wird min(0,'a'-'A'==32) ausgewertet und 0 zurückgegeben - also keine Änderung.
 
Zurück
Oben