C++定义一个宏,比较两个数的大小

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;
} 

在这里插入图片描述


版权声明:本文为qq_41117896原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。