C++定义一个宏,比较两个数的大小
要求不使用<,>,if语句
思路:负数是用补码表示的,最高位是符号位,所以判断a-b的最高位是不是1就可以知道a-b是不是负数。
1<<31得到最高位是1,其余位都是0,然后和a-b做与运算就可以知道最高位是不是1了
代码如下:
#define MAX(a,b) ( (((a)-(b)) & (1<<31) )>>31 ? (b):(a) )
验证:
#define MAX(a,b) ( (((a)-(b)) & (1<<31) )>>31 ? (b):(a) )
#include <iostream>
using namespace std;
int main(){
cout<<MAX(3,5);
return 0;
}