定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

本文介绍了一系列使用位运算实现的比较和选择操作宏定义,包括正数和负数的判断、数值大小比较以及最大值的选择等。这些宏定义利用位运算的特性,在特定场景下可以提高程序效率。

整理自网络,正确性有待验证。

 

#define ZHENG(i) ((i >> 31) == 0)

#define FU(i) ((i >> 31) != 0)

#define COMPARE(a,b) ((ZHENG(a) && FU(b)) || (((ZHENG(a) && ZHENG(b)) || (FU(a) && FU(b))) && ((((a) - (b)) >> 31) == 0)))

 

// a<b 1 a==b 0 a>b -1

#define COMPARE(a,b) (((((long)((b)-(a)))&0x80000000)?-1:0)|((((long)((a)-(b)))&0x80000000)?1:0))

 

#define BIG(a,b) ( ( ( (INT32)( b ) )-( (INT32)( a ) ) ) >> ( sizeof( INT32 )*8-1 ) & 0x1 )

 

#define MAX4(a,b) (((a)-(b)) & 0x80000000 ) ? (b) : (a)

#define MAX(a, b) (((b) - (a) & (0x1 << 31)) >> 31) 

 

#define new_big_than(a, b) !!( ((a) < 0 || (b) < 0) ? (((b) - (a) & (0x1 << 31)) >> 31) : (( (b) == 0)? (a): (a)/(b)) )

#define old_big_than(a, b) !!(((b) - (a) & (0x1 << 31)) >> 31)

 

#define big_than(a, b) (((unsigned long)(((b) - (a)) / abs((b) - (a))) & (0x1  << 31)) >>  31) 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值