slwope 2014-04-11 11:14 采纳率: 0%
浏览 4524

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条回答 默认 最新

  • 波罗学 2014-04-17 03: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;
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题