开发者社区> 问答> 正文

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的值?

展开
收起
a123456678 2016-03-04 17:49:55 3243 0
1 条回答
写回答
取消 提交回答
  • ((((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;
    }
    2019-07-17 18:52:40
    赞同 展开评论 打赏
问答分类:
C++
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载