Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55513
  • 博文数量: 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");
    }
}

 

 

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

chinaunix网友2009-05-14 10:41:55

BIG(a,b) ( ( ( (INT32)( b ) )-( (INT32)( a ) ) ) >> ( sizeof( INT32 )*8-1 ) & 0x1 ) 忘记*8

chinaunix网友2009-05-14 10:40:27

比较整形 BIG(a,b) ( ( ( (INT32)( b ) )-( (INT32)( a ) ) ) >> ( sizeof( INT32 )-1 ) & 0x1 )

chinaunix网友2009-04-22 20:46:16

#include #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"); } }

chinaunix网友2009-04-22 20:44:39

尻屄好快乐啊!祝大家尻的快乐尻的开心

chinaunix网友2009-04-22 20:42:21

哎!还可以。