分析:
当a大于b的时候,a-b为正数,最高位为0,返回的a-k*z = a;当a小于b的时候, a-b为负数,最高位为1,返回的a-k*z = b。可以正确返回两数中较大的。
代码:
int Mar(int a, int b)
{
int z=a-b;
int k=(z>>31)&1;
return a-k*z;
}
通过位移,得到z的符号位。然后与1相与,得到符号位。
分析:
当a大于b的时候,a-b为正数,最高位为0,返回的a-k*z = a;当a小于b的时候, a-b为负数,最高位为1,返回的a-k*z = b。可以正确返回两数中较大的。
代码:
int Mar(int a, int b)
{
int z=a-b;
int k=(z>>31)&1;
return a-k*z;
}
通过位移,得到z的符号位。然后与1相与,得到符号位。