Signatur von DrGreenthumb
-
syn0ps1s schrieb:
Mich würde es sehr interessieren, wie man dieses Gebilde step by step auseinander nehmen und dann einen "normal-strukturierten" C-Code bilden kann.
du könntest zunächst die ?:-Paare durch ifs ersetzen.
-
Hi r0nny, DrGreenthumb,
Ich werde es heute mal aufstellen und zur Korrektur hier nochmals einfügen, nicht dass ich ein falscher code analysiere. Aber danke vielmals!!!
gruss syn0ps1s
-
Lustiges Programm. Ich hab das ganze aus Neugier auch mal auseinandergebastelt und im Debugger angeguckt.
So kann man es auch ganz gut verstehen.main(k) { int c; int a; int b; int d; for(k=0;k<125;++k) { if((k+1)%25) { a="[k<qFUF>XB]X=9V=hm9FC"[k/6]; b=a-52; d=b&1<<k%6; if(d) c=64; else c=32; } else c=10; putchar(c); } }
-
hi, _sepp_ du bist fies, jetzt hast du mir die denkarbeit weggenommen :p
egal. ich kapier das nicht:
a="[k<qFUF>XB]X=9V=hm9FC"[k/6];
und
d=b&1<<k%6;
Kann mir jemand hier helfen? Danke
Gruss syn0ps1s
-
syn0ps1s schrieb:
egal. ich kapier das nicht:
a="[k<qFUF>XB]X=9V=hm9FC"[k/6];
a wird ein element des arrays "[k<qFUF>XB]X=9V=hm9FC" zugewiesen.
solange k<6 ist es das element von position 0
ist k>=6 aber <12 dann von position 1
bei 12 bis 17 position 2
usw...syn0ps1s schrieb:
und
d=b&1<<k%6;
mach' klammern drum. z.b. so:
d= b & (1 << (k % 6));
-
syn0ps1s schrieb:
egal. ich kapier das nicht:
a="[k<qFUF>XB]X=9V=hm9FC"[k/6];
Ist dasselbe wie
const char * const foo="[k<qFUF>XB]X=9V=hm9FC"; a = foo[k/6];
und
d=b&1<<k%6;
Das erste Bit von b von rechts wird um k mod 6 Stellen nach links verschoben und in d gespeichert.
-
Michael E. schrieb:
Das erste Bit von b von rechts wird um k mod 6 Stellen nach links verschoben und in d gespeichert.
nö, das ergebnis der 'und-verknüpfung' von b und 2^(k mod 6) wird in d gespeichert.
-
So ich bin's, __sepp__, hab mich jetzt mal registriert hier.
Also:
"[k<qFUF>XB]X=9V=hm9FC"
ist ein Array aus Characters, darauf wird mit
[k/6]
zugegriffen, also bei den ersten 6 Iterationen wird auf das erste Element des Arrays zugegriffen (k/6=0), bei den nächsten 6 Iterationen auf das zweite Element (k/6=1) usw...
Für
d=b&1<<k%6;
musste ich mir erstmal angucken in welcher Prioritätsreihenfolge die einzelnen Operatoren abgearbeitet werden.
Zuerst wird k%6 berechnet, dann wird so oft die 1 nach links geshiftet.
Beispiel: k=4-> k%6 = 4 -> 1<<k%6 = 010000.Das ganze wird ver-undet mit b und dabei kommt entweder 0 raus oder nicht, hängt von b ab.
Dahinter steckt also, dass die Bits der einzelnen Zeichen in dem Array (minus 52) das Muster für die einzelnen Zeilen angeben (naja vll etwas blöd ausgedrückt aber egal)
-
vielleicht kennt einer den noch nicht
main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}
ich weiss, eigentlich ein alter hut...
-
Koennte ein Quine sein...