Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56069
  • 博文数量: 16
  • 博客积分: 650
  • 博客等级: 上士
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-08 19:32
文章分类

全部博文(16)

文章存档

2008年(16)

我的朋友
最近访客

分类: C/C++

2008-06-17 23:14:10

请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

搞的比较复杂。主要思想就是a-b的值的最高位是否为0;但是又得考虑整数溢出的问题,所以很复杂。不知道哪位大侠有更好的办法,指点指点。


#include <stdio.h>

#define ZHENG(i) ((i >> 31) == 0)
#define FU(i) ((i >> 31) != 0)
#define COMPARE(a,b) ((ZHENG(a) && FU(b)) || (((ZHENG(a) && ZHENG(b)) || (FU(a) && FU(b))) && ((((a) - (b)) >> 31) == 0)))

void main()
{
    int a = 0x80000001;
    int b = 0x6FFFFFFF;

    if(COMPARE(a,b))
    {
        printf("a >= b\n");
    }
    else
    {
        printf("a < b\n");
    }
}

 

 

阅读(6401) | 评论(11) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2008-10-10 11:21:28

//a>b -1 a<=b 0 b>a 1 b<=a 0 #define COMPARE(a,b) (((((long)((b)-(a)))&0x80000000)?-1:0)|((((long)((a)-(b)))&0x80000000)?1:0)) // ab -1