2010-12-16 36 views
14

我正在查看http://home.hccnet.nl/h.g.muller/umax4_8.c,一個C源文件。在主,它有這個:這是幹什麼的?

N=-1;W(++N<121) 
    printf("%c",N&8&&(N+=7)?10:".?+nkbrq?*?NKBRQ"[b[N]&15]); 

我不明白什麼的printf()是幹什麼的,但不知何故,棋盤輸出到終端。

有什麼想法?

+6

這是很好的混淆代碼,哈哈。 – 2010-12-16 04:57:33

+8

你在這裏失蹤了很多。 W例如被定義爲'while'。你可能想要包含所有相關的代碼。 「 – EboMike 2010-12-16 04:58:25

+1

」......儘管你可能會將其描述爲混淆的C代碼,但由於它的體積小,它可能比更大,更好的風格引擎更容易理解。「 H.G. Muller – 2010-12-16 05:14:21

回答

28

基本上這樣的:

for (n = 0; n < 121; ++n) { 
    if (n & 8) { 
     n += 7; 
     putchar('\n'); 
    } else { 
     putchar(".?+nkbrq?*?NKBRQ"[b[n] & 15]); 
    } 
} 

什麼,做的,每8個板項目後,再打印一個換行符;否則,打印b[n]指示的板子項目。

+1

+1令人驚歎的作品 – SmallChess 2010-12-16 05:01:50

+1

H.G. Muller是C J-Y的另一個名字;) – William 2010-12-16 05:12:51

+2

@威廉:好笑。 :-)其實,我已經做了很多年的逆向工程。這很像RE,只是因爲我沒有直接處理目標代碼而變得更容易。 :-P – 2010-12-16 05:16:56