只好用C的位算符和逻辑运算符来比较两个数的大小 ,求思路!

只能用C的位算符和逻辑运算符来比较两个数的大小 ,求思路!!!!!
书上一习题。。。 

只能用C的位算符和逻辑运算符来比较两个数的大小,百思不得其解!

有会的吗! 给点思路也可以!!!!

------解决方案--------------------
C/C++ code
    unsigned int a =654651, b=654541 ;
    unsigned int c = a ^b;
    unsigned int  n = 0, max = 0;
    while ( !(c &0xf0000000) )
    {
        c<<=4;
        n+=4;
    }
    while(!(c &0x80000000 ) )
    {
        c<<=1;
        n++;
    }
    c>>=32-n-1;
    max = (a & c)? a:b;

------解决方案--------------------
C/C++ code

int a, b, aXORb;
int adiff, bdiff;
aXORb = a ^ b;//进行异或运算,得出a与b的不同位,相同位即相等,不用管
adiff = a & aXORb; //得出a的不同位
bdiff = b & aXORb; //得出b的不同位

while(1)
{ 
    adiff << 1;
    bdiff << 1;
    if( tempa & 0x8000 ) //此处把int当两个字节处理,TC下可以;如果int是4字节,则0x8000换成0x8000 0000
    {
        printf("a is the larger\n"); //此时a与b的最高位必然不同!因为相同位已经在前面过滤
        return;                 //必然有一个先与出来非0,大者即为该数。

    }                     //如果两者与出来都是0,则再向左移动一位
    else if( tempb & 0x8000 )
    {
        printf("b is the larger\n");
        return;
    }


}