求较小的值,不能用 比较运算符 if-else ?: while for 内嵌汇编 递归 第三方函数
int Min(int a, int b)
{
//write code here
}
#include <stdio.h>
// jernymy 考虑到16位机器和32为机器,所以使用
// sizeof(int)*8-1, 16位为15,32位为31
#define MOVE_BIT (sizeof(int)*8-1)
int MinV(int nA, int nB)
{
int nAry[2] = {nA, nB};
return nAry[!((nA-nB) >> MOVE_BIT)];
#if 0
int nC = nA - nB;
int nBit;
if (nC > 0)
{
nBit = !(nC >> MOVE_BIT) = 1; // 因为高位补0,取反为1
}
else if (nC < 0)
{
nBit = !(nC >> MOVE_BIT) = 0; // 因为高位补1,取反为0
}
else // ==0
{
nBit = !(nC >> MOVE_BIT) = 1; // 因为高位补0,取反为1
}
nAry[nBit]; // 就是那个最小的。
#endif
}
int main(void)
{
printf("MinV(%d, %d):%d\n", 300, 299, MinV(300, 299));
printf("MinV(%d, %d):%d\n", 100, 200, MinV(100, 200));
printf("MinV(%d, %d):%d\n", ~0, ~0, MinV(~0, ~0));
return 0;
}