关于欧几里得算法的代码,求解释,该怎么处理

关于欧几里得算法的代码,求解释
在网上看到的,应用欧几里得算法求最大公约数,没看懂,求解释

递归版本:
  int Euclid(int a,int b)
  {
while(a=a%b)a^=b^=a^=b;
return b;
  }

  迭代版本:
  int Euclid(int a,int b)
  {
while(a=a%b)a^=b^=a^=b;
return b;
  }



------解决方案--------------------
谁写的代码,好像是故意让初学者读不懂,下面是改写过的与楼主等价的代码,顺便说一下,这个代码是循环结构而不是递归。



C/C++ code

int Euclid(int a,int b)
{
  while (1)
  {
    a= a % b;
    if (a==0)
    break;

    //以下3条语句的功能是交换a,b的值,等价于{int tmp; tmp=a; a=b; b=tmp;}
    a^=b;
    b^=a;
    a^=b;
  }
  return b;
}

------解决方案--------------------
http://www.iflym.com/index.php/datastructure/201204240002.html
证明。自己去看下吧。