标题:短的代码(代码转载)
取消只看楼主
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
 问题点数:0 回复次数:3 
短的代码(代码转载)
注,这段代码的本体和创意是转载的(我只对它的输出结果做了小小调整)。它采用了一种“故意”混淆视听的方式来写的,你是否能够读懂并解释这段很短的代码呢?
程序代码:
#include <stdio.h>
void main(char _)
{
    for(--_;putchar(_++["Ij-Ipx!bsf!zpv\"\1"]-1););
}


[[it] 本帖最后由 hoodlum1980 于 2008-3-20 17:54 编辑 [/it]]
搜索更多相关主题的帖子: 代码 void 本体 main include 
2008-03-20 14:20
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
得分:0 
附:另一段纯属恶搞的代码。里面有很多BBS表情。
程序代码:
#include <stdio.h>
main()
{
    int _,_____,bbb,T_T,o,O,I;
    int a,b,c,d,e;
    I=(O=(o=(T_T=(bbb=(_____=(_=1)*2)*2)*2)*2)*2)*2;
    a=-_-bbb;
    b=-_||bbb;
    c=-_____-bbb;
    d=T_T;
    e=~~~I>_<~~~!bbb;
    printf("%d %d %d %d %d\n",a,b,c,d,e);
    printf("%d\n",I<O>_<O>I==O^_^O?_-_:-_-bbb^_^o);
}
2008-03-20 21:40
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
得分:0 
对第一段代码的解释:
/*
其实_是参数个数,对于直接运行的程序来说,表示只有第一个参数,即可执行文件路径,因此它就为1.

注意:
     a[b] 即*(a+b), 即*(b+a),即b[a];
     a[i]是*(a+i),因此a[i]也可以写为i[a];(一个常数+一个指针,结果还是一个指针)

_++["J!Mpwf!Zpv\24\1"]-1);
把_换成i
i++["J!Mpwf!Zpv\24\1"]-1);
也就是
("J!Mpwf!Zpv\24\1")[i++] -1

因此每个字符是要打印输出字符的后一个字符,例如要打出I,输入的是I后面的J。打印空格,输入的是后面的'!'。
\24表示输入的是8进制数,即十进制的20。19打出来是两个连续叹号(注意,是一个特殊字符,不同于 '!').

-------------------------------------------------
    常用的转义字符及其含义
-------------------------------------------------
转义字符 转义字符的意义
\n 回车换行
\t 横向跳到下一制表位置
\v 竖向跳格
\b 退格
\r 回车
\f 走纸换页
\\ 反斜线符"\"
\' 单引号符
\a 鸣铃
\ddd 1~3位八进制数所代表的字符
\xhh 1~2位十六进制数所代表的字符
广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。表2.2中的\ddd和\xhh正是为此而提出的。
ddd和hh分别为八进制和十六进制的ASCII代码。如\101表示字?quot;A" ,\102表示字母"B",\134表示反斜线,
\XOA表示换行等。

int putchar(int c);向stdout写入一个字符,即打印一个字符。返回值是被写入的字符。所以上面的输入参数最后一个字符必须是\1,这样才能结束循环。
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
这里的第一个参数,argc总是大于等于1。argv是中存储了命令行参数的字符串数组,最后一个总是NULL。

命令行来源于文件拖放,运行或cmd下输入的命令行等。

当从应用程序直接启动时(例如双击),一般argc=1,argv[0]是程序文件的路径。但是不要用argv参数来获取程序路径,因为如果用户使用CreateProcess函数启动一个进程,则argv参数由CreateProcess参数指定,所以可能不准确。

在上面的代码中,main函数只提供第一个参数,直接启动程序时,其值为1.

*/
2008-03-20 21:52
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
得分:0 
蛇这个很有意思。我把这个代码先重新排版一下,当然了,即使重新排版之后,这种代码风格也非常非常不可取。。。。其中的宏被我替换了,其中2个函数名字也被我改了。有时间我会继续分析,有事情要出去啦。
程序代码:
/*尚未分析完成。。。。等待。。。。*/
#include <stdio.h>
                                                               
int k,f,g,q;
int p,m=0,n=1,d=0,e=0,a=2,b=5,c=5,t=1,M[22][76]={-1,4};

L()
{
    return a%2?(f=0,g=a/2?-1:1):(g=0,f=a/2?1:-1),\
        (!M[m+f][n+g]||M[m+f][n+g]==10||M[m+f][n+g]==-1);
}

K()
{
    M[m+f][n+g]==-1 && PrintGameOver(),M[m+f][n+g]!=10?F(m,n):(t=0),\
    M[m+f][n+g]=(a+2)%4+1;
}
D()
{
    a-0\
        ||((m+f>=0&&L())?(K(),m=m+f):(a=rand()%2?3:1)),a-2\
        ||((m+f<22&&L())?(K(),m=m+f):(a=rand()%2?1:3)),a-1\
        ||((n+g<76&&L())?(K(),n=n+g):(a=rand()%2?0:2)),a-3\
        ||((n+g>=0&&L())?(K(),n=n+g):(a=rand()%2?2:0));
}
F(x,y)
{
    M[x][y]%2?(p=0,q=M[x][y]/2?1:-1):(q=0,p=M[x][y]/3?-1:1),\
    M[x+q][y+p]==-1?(M[x+q][y+p]=0,b=x+q,c=y+p,M[x][y]=-1):F(x+q,y+p);
}

/*找到一个空位置打印X表示食物*/
PrintFood()
{
    int x,y;
    x=rand()%22,\
    y=rand()%76,\
    M[x][y]==0?(M[x][y]=10,gotoxy(y+1,x+2),printf("X")):PrintFood();
}

PrintSnake()/* ??? */
{
    gotoxy(c+1,b+2),printf(" "),\
    gotoxy(n+1,m+2),printf("O"),\
    gotoxy(e+1,d+2),printf("o");
}

PrintGameOver()
{
    gotoxy(10,10),printf("The""g""ame is over!"),\
    getch( ),\
    exit();
}

main()
{
    clrscr(); /*清屏,我加的*/
    PrintFood();
    while(1)
    {
        while(bioskey(1)==0)
            d=m,e=n,\
            D(),\
            PrintSnake(),\
            t==0&&(PrintFood(),t=1),\
            delay(45000);/*我吧演示时间改长了*/

        k=bioskey(0)>>8,\
        k-75||\
            (a=3),k-77||\
            (a=1),k-72||\
            (a=0),k-80||\
            (a=2);
    }
}


[[it] 本帖最后由 hoodlum1980 于 2008-3-22 20:45 编辑 [/it]]
2008-03-22 11:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-204386-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.196931 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved