#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的值?
C++中宏定义比较两个数的大小
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂
- ¥15 wordpress 产品图片 GIF 没法显示
- ¥15 求三国群英传pl国战时间的修改方法
- ¥15 matlab代码代写,需写出详细代码,代价私
- ¥15 ROS系统搭建请教(跨境电商用途)
- ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。