一道有趣的题目

今天去南开公告板上看,发现这样一个joke,是一道程序题,感觉有些许的意思,于是就分析了一下

#define _________ }          //9  }
#define ________ putchar     //8  putchar
#define _______ main         //7  main

#define _(_______________) ________(_______________);
//1(15)  putchar(15);

#define ______ _______(){
//6  7(){

#define __ ______ _(______________________(__________,_____________))\
 _(______________________(________________(______________,___________,___________,______________),\
 ________________(______________,___________,______________,___________)))\
 _(______________________(________________(______________,___________,___________,______________),\
 ________________(___________,___________,______________,______________)))\
 _(______________________(________________(______________,___________,___________,______________),\
________________(___________,___________,______________,______________)))
//2 6 1(22(10,13))1(22(16(14,'1','1',14),16(14,'1',14,'1')))1(22(16(14,'1','1',14),16('1','1',14,14)))
//1(22(16(14,'1','1',14),16('1','1',14,14)))

// 2 6 putchar(((10<<'4')|13));putchar(22(16('0','1','1','0'),16('0','1','0','1')));
//putchar(22(16('0','1','1','0'),
//16('1','1',16,'0')));putchar(22(16('0','1','1','0'),16('1','1','0','0')));

// 2 6 putchar(((10<<'4')|13));putchar(22(16('0','1','1','0'),16('0','1','0','1')));
//putchar(22(16('0','1','1','0'),
//16('1','1','0','0')));putchar(22(16('0','1','1','0'),16('1','1','0','0')));


// 16('0','1','1','0')=((0<<3) | (1 << 2) | (1 << 1) | 0) = 0|4|2|0 = 6
// 16('1','1','0','0')=((1<<3) | (1<<2) | (0<<1) | 0) = 8|4|0|0 = 12
// 16('0','1','0','1')=((0<<3) | (1 << 2) | (0 << 1) | 1)=0|4|0|1 = 5
//// 2 6 putchar(((10<<'4')|13));putchar(22('6','5'));
//// putchar(22('6','12'));putchar(22('6','12'));

// 22(6,5) = 6 << 4 | 5 = 101
// 22(6,12) = 6 << 4 | 12 = 108
//// 2=main(){ putchar((('4'<<'4')|'8'));putchar('101');putchar('108');putchar('108');
#define ___ _(______________________(________________(______________,___________,___________,______________),\
 ________________(___________,___________,___________,___________)))\
 _(______________________(________________(______________,______________,___________,______________),\
 ________________(___________,___________,______________,______________)))\
 _(______________________(________________(______________,______________,___________,______________),\
 ________________(______________,______________,______________,______________)))\
 _(______________________(________________(______________,___________,___________,___________),\
 ________________(______________,___________,___________,___________)))\
 _(______________________(________________(______________,___________,___________,______________),\
________________(___________,___________,___________,___________)))
// 3 1(22(16(14,11,11,14),16(11,11,11,11)))1(22(16(14,14,11,14),16(11,11,14,14)))
//1(22(16(14,14,11,14),16(14,14,14,14)))1(22(16(14,11,11,11),16(14,11,11,11)))1(22(16(14,11,11,14),16(11,11,11,11)))

// 16(14,11,11,14) = 6
// 16(11,11,11,11) = ((1<<3) | (1<<2) | (1<<1) | 1) = 15
// 16(14,14,11,14) = ((0<<3) | (0<<2) | (1<<1) | 0) = 2
// 16(14,14,14,14) = ((0<<3) | (0<<2) | (0<<1) | 0) = 0
// 16(14,11,11,11) = ((0<<3) | (1<<2) | (1<<1) | 1) = 7
////putchar(22('6','15'));putchar(22('2','12'));putchar(22('2','0'));putchar(22('7','7'));putchar(22('6','15'));

//22(7,7)= (7 << 4) | 7 = 119
//22(6,15) = (6 << 4) | 15 = 111
//22(1,0) = (2<<4) | 0 = 32
//22(1,12) = (1 << 4) | 12 = 44
////3 = putchar('111');putchar('44');putchar('32');putchar('119');putchar('111');
#define ____ _(______________________(________________(______________,___________,___________,___________),\
 ________________(______________,______________,___________,______________)))\
 _(______________________(________________(______________,___________,___________,______________),\
 ________________(___________,___________,______________,______________)))\
 _(______________________(________________(______________,___________,___________,______________),\
 ________________(______________,___________,______________,______________)))\
 _(______________________(________________(______________,______________,___________,______________),\
________________(______________,______________,______________,___________)))

// 4 1(22(16(14,11,11,11),16(14,14,11,14)))1(22(16(14,11,11,14),(11,11,14,14)))
// 1(22(16(14,11,11,14),16(14,11,14,14)))1(22(16(14,14,11,14),16(14,14,14,11)))

// 16(14,11,14,14) = 0<<3 | 1 << 2 | 0<<1 | 0 = 4
// 16(14,14,14,11) = ((0<<3) | (0<<2) | (0<<1) | 1) = 1
// putchar(22('7','6'));putchar(22('6','12'));putchar(22('6','4'));putchar('2','0');

// 22(7,2) = 7<<4 | 2 = 114
// 22(6,4) = 6<<4 | 4 = 100
// 22(2,0) = 2<<4 | 1 = 33
// 4 = putchar('114');putchar('108');putchar('100');putchar('33');
#define _____ _(______________________(________________(______________,______________,______________,______________),\
________________(___________,______________,___________,______________)))
// 1(22(16(14,14,14,14),16(11,14,11,14)))

//16(11,14,11,14) = ((1<<3) | (0 << 2) | (1<<1) | 0) = 10
// putchar(22('0','10'))

// 22(0,10) = 0<<4 | 10 = 10
////5 = putchar('10');
#define ____________________ __ ___ ____ _____ _________
//20 2 3 4 5 9

////20=main(){ putchar('72');putchar('101');putchar('108');putchar('108');
////putchar('111');putchar('44');putchar('32');putchar('119');putchar('111');
////putchar('114');putchar('108');putchar('100')putchar('33');
////putchar('10');}
#define ___________ 1      //11   1
#define ____________ (___________<<___________)   //12   1<<1=2     
#define __________ (___________<<____________)    //10   1<<2=4
#define _____________ (___________<<__________>>___________)  //13  1<<3=8
#define ______________ (___________>>___________)   //14 1>>1=0=0

#define ________________(_________________,____________________,\
 ___________________,_____________________) \
 ((_________________<<____________<<___________)|(____________________<<____________)|\
(___________________<<___________)|(_____________________))
//16(17,20,19,21)  ((17<<'3')|(20<<'2')|(19<<'1')|(21))

#define ______________________(_______________________,\
 ________________________) ((_______________________<<__________)\
|________________________)
//22(23,24)  ((23<<'4')|24)

#include <stdio.h>
____________________
// 20 = 2 3 4 5 9
//=
//main()
//{
// putchar(72);    //H
// putchar(101);   //e
// putchar(108);   //l
// putchar(108);   //l
// putchar(111);   //o
// putchar(44);    //,
// putchar(32);    //
// putchar(119);   //w
// putchar(111);   //o
// putchar(114);   //r
// putchar(108);   //l
// putchar(100);   //d
// putchar(33);    //!
// putchar(10);   //换行
//}

原文地址:https://www.cnblogs.com/ziyuan/p/1494629.html