1.
//!> 4
#define ________ putchar
//!>
1.2.1 ->putchar
#define _______ main
//!>
1.1.1->
main
#define _(a) ________(a);
//!>
1.2 ->1.2.1
#define ______ _______(){
//!>
1.1-> 1.1.1 -> main(){
#define __ _______(0x48)_(0x65)_(0x6C)_(0x6C)
//!>
1 -> 1.1-> 1.2( _( ? ) : putchar( ? ) )
---> hell
#define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)//!>
2 -> putchar(? )
#define _____(0x72)_(0x6C)_(0x64)_(0x21)
//!>
3 -> putchar(? )
#define _____ __ ___ _____________
//!>
0 -> ...}
#include<stdio.h>
_____
//!>解释起来很eaay啦
根据我写执行顺序很好理解,其实就是宏定义处理而已~~
2.
#include<stdio.h>
main()
{
int x=0,y[14],*z =&y;
*(z++)=0x48;
//!>此时y[0]已经初始化为0x48了,因为z和y操作一个内存
*(z++)=y[x++]+0x1D;
//!>下面的操作就是很easy的咯~,呵呵呵~~~
*(z++)=y[x++]+0x07;
//!> 就是ASCII码而已
*(z++)=y[x++]+0x00;
*(z++)=y[x++]+0x03;
*(z++)=y[x++]-0x43;
*(z++)=y[x++]-0x0C;
*(z++)=y[x++]+0x57;
*(z++)=y[x++]-0x08;
*(z++)=y[x++]+0x03;
*(z++)=y[x++]-0x06;
*(z++)=y[x++]-0x08;
*(z++)=y[x++]-0x43;
*(z++)=y[x]-0x21;
//!> 此时z就是0了!:-)~~~
x=*(--z);
//!> x接着从0 开始
while( y[x] != NULL )
putchar( y[x++]);
//!> 输出看看
}
3.
#include<stdio.h>
#define __(a) goto a;
#define ___(a) putchar(a);
#define _(a,b) ___(a) __(b);
main()
{
_:__(t)a:_('r',g)b:_('$',p)
//!> 可以很无语的说,
c:_('l',f)d:_('',s)e:_('a',s)
//!> 这个代码就是goto问题
f:_('o',q)g:_('l',h)h:_('d',n)
//!> 自己可以,慢慢推理就是OK的
i:_('e',w)j:_('e',x)k:_('\n',z)
//!> 所以就不解释了!
l:_('H',l)m:_('X',i)n:_('!',k)
o:_('z',q)p:_('q',b)q:_(',',d)
r:_('i',l)s:_('w',v)t:_('H',j)
u:_('a',a)v:_('o',a)w:_(')',k)
x:_('l',c)y:_('\t',g)z:___(0x0)
}
4.
#include <stdio.h>
intn[]={0x48,
//!> 定义一些字符而已
0x65,
0x6C,
0x6C,
0x6F,
0x2C,
0x20,
0x77,
0x6F,
0x72,
0x6C,
0x64,
0x21,
0x0A,
0x00
//!> 作为结束标志
};
int * m = n;
//!> m和n指向同一个内存的!
main( n )
{
putchar
( *m ) !='\0' ? main(m++) :exit(n++);
//!> 简单的递归而已...
}
5.
#include <stdio.h>
main()
{
int i,n[]=
//!> 本质就是定义一些字符而已
{
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<(1>>1)))+((1<<1)<<(1<<1))),
//!> ASCII = 72
->H
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+(1<<(1>>1))),
//!> ASCII = 101
->e
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),
//!> ASCII = 108
->l
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),
//!> ASCII = 108
->l
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-(1<<(1>>1))),
//!> ASCII = 111
->o
(((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),
//!> ASCII =
44
-> ,
((1<<1)<<(1<<1)<<(1<<1)),
//!> ASCII =
32
-> 空格
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1))-(1<<(1>>1))),
//!> ASCII = 119
->w
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-(1<<(1>>1))),
//!> ASCII = 111
->o
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))+(1<<1)),
//!> ASCII = 114
->r
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))-((1<<1)<<(1<<(1>>1)))),
//!> ASCII = 108
->l
(((1<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))),
//!> ASCII = 100
->d
(((1<<1)<<(1<<1)<<(1<<1))+(1<<(1>>1))),
//!> ASCII =
33
-> !
(((1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1<<(1>>1)))
//!> ASCII =
13
-> 回车
};
for( i =(1>>1); i <(((1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1<<1));i++)
//!> for( i= 0; i < 12 ; i++ )
printf("%c",n[i]);
}
//!> 对于这一题的理解的要求:
//!>
对于移位运算的熟悉(其实了解就OK )
//!>
具备读代码的耐心
6.
#include <stdio.h>
#define _(_) putchar(_);
int main(void)
{
int i =0;_(
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++i)_(++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++i)_(++++++++++++++
i)_(--++i)_(++++++i)_(------
----------------------------
----------------------------
----------------------------
----------------------------
----------------i)_(--------
----------------i)_(++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++i)
_(----------------i)_(++++++
i)_(------------i)_(--------
--------i)_(----------------
----------------------------
----------------------------
----------------------------
----------------------------
------i)_(------------------
----------------------------
i)
returni;
}
//!> 对于此题在g++下面是可以成功运行的,但是
//!> 我们要知道,对于
...+++...;和...---...之类的
//!> 运算在不同的编译器下的运算可能是不一样的
//!> 所以对于不同的环境进行不同的变通
引用链接:
http://coolshell.cn/articles/914.html