挂科了,心情不好,直接贴代码
//已知a<=x<=b , c<=y<=d, 求解x&y的最大值
unsigned MaxAnd(unsigned a, unsigned b, unsigned c, unsigned d )
{
unsigned m, tmp;
m = 0x80000000;
while ( m != 0 )
{
if( b & ~d & m )
{
tmp = ( b & ~m ) | ( m - 1 );
if( tmp >= a )
{
b = tmp;
break;
}
}
else
if ( ~b & d & m )
{
tmp = (d & ~m ) | ( m - 1);
if( tmp >= c )
{
d = tmp;
break;
}
}
m = m >> 1;
}
return b&d;
}
//已知a<=x<=b , c<=y<=d, 求解x&y最小值
unsigned MinAnd(unsigned a, unsigned b, unsigned c, unsigned d )
{
unsigned m, tmp;
m = 0x80000000;
while ( m != 0 )
{
if( ~a & ~c & m )
{
tmp = ( a | m ) & -m;
if( tmp <= b )
{
a = tmp;
break;
}
tmp = ( c | m ) & -m;
if( tmp <= d )
{
c = tmp;
break;
}
}
m = m>>1;
}
return a & c;
}