请问一个c栈程序的有关问题

请教一个c栈程序的问题
#define MD(a)a<<2

int main(){
 int i;
 Stack* mystack;
 push(mystack,MD(1));


我想问#define MD(a)a<<2中MD是什么意思。当输入1的时候为什么入栈的是4?
希望大神给指点迷惑/抱拳
------解决思路----------------------
#define MD(a)a<<2这是一个宏。
首先我们按照宏替换的原则来看。。结果如下:
MD(1)----->1<<2 

再来看1<<2  。<<是按位运算符,百度即可。
1的二进制是1,进行按位运算就是1向左移动俩位,就是100(二进制)     ;然而100刚好是4