编程论坛
注册
登录
编程论坛
→
C++教室
比较两个数的大小题
forclwy
发布于 2009-08-31 20:17, 1612 次点击
谁能帮我解释下:
#define MAX(a,b) ((long)(a-b)&0x80000000 ? b:a)
0x80000000这块是什么??
谢啦
6 回复
#2
柳亚子
2009-08-31 21:15
沙发我坐
0x80000000是十六进制数据0100 000000000000000000000.....
与(a-b)求与
#3
非飞人
2009-09-03 12:53
32位的int此值为(INT_MIN)0x80000000,即–2147483648 用二进制第一位为1
&为位运算中的与运算:
若a > b ,则a-b的二进制最高位为0,与上任何数还是0,所以大数为a;
否则,a-b为负数,二进制最高位为1,与上0x80000000(最高位为1其他为0)之后为1,所以此时的大数为b.
#4
kqscy1
2009-09-03 16:26
#difine Max(a,b) ((a)>(b)?(a):(b))
#5
mfkblue
2009-09-03 16:54
简单问题为什么要复杂化?
因为000111看的麻烦,写的麻烦,所以进化出a>b,还要&来和二进制数去计算,蛋疼.
#6
hyfl
2009-09-03 18:32
来看3楼
#7
mengfp
2009-09-07 18:27
这样效率高
1