编程论坛
注册
登录
编程论坛
→
C++教室
比较两个数的大小题
forclwy
发布于 2009-08-31 20:17, 756 次点击
谁能帮我解释下:
#define MAX(a,b) ((long)(a-b)&0x80000000 ? b:a)
0x80000000这块是什么??
谢啦
1 回复
#2
tsy1984
2009-10-04 16:45
0x表示十六进制数,0x8的二进制表示为1000
32位系统的long为4字节,0x80000000为首位为1,其余位为0的四字节长的二进制数。
对于有符号数,首位是符号为,1表示负,0表示正。“&”为按位与操作。
该宏即是将a-b的结果与0x80000000按位与,目的是判断a-b的最高位是否为1,如果(a-b)&0x80000000的结果为非零,则说明a-b的最高位为1,即a-b为负,即a<b。
反之则说明a-b的最高位为0,即a-b为非负,即a>=b。
1