2 u014659731 u014659731 于 2014.04.11 19:14 提问

C++中宏定义比较两个数的大小
c++

#include
#define max(a,b) ((((long int)((a)-(b)))&0x80000000)?b:a)
void main()
{
int t,a,b;
cout<<"output a,b"< cin>>a,b;
t=max(a,b);
cout<<t<<endl;
}为什么运行结果老是a的值?

2个回答

peitianmeng
peitianmeng   2014.04.17 11:28

((((long int)((a)-(b)))&0x80000000)?b:a) /* 这是通过判断符号位进行大小判断 */
运行下看看吧
1-3 = -2;
我开始以为可能和64bit 32bit有关,
64位机器(long int)-2的计算机二进制对应十六进制表示是0xfffffffffffffffe
32位机器(long int)-2的计算机二进制对应十六进制表示是0xfffffffe
两者和0x80000000相与运行的效果都是相同的,结果为1,所以最大值为b,即是3

这两者都是没有关系的 算出来的结果都是正确的。
我对你的源码略做修改,因为你的源码我运行的比较乱。
#include

#define max(a,b) ((((long int)((a)-(b)))&0x80000000)?b:a)

using namespace std;

int main()
{
int t,a,b;
cout << "output a,b" << endl;
cin >>a >> b;
t = max(a, b);
cout<<t<<endl;
return 0;
}

u014659731
u014659731 Thank you very much.
大约 3 年之前 回复
u014659731
u014659731   2015.01.14 10:10

Thank you very much.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!