2010-12-16 61 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